组合
| Time Limit: | 1000MS | Memory Limit: | 65536KB |
|---|---|---|---|
| Total Submissions: | 445 | Accepted: | 251 |
Description:
问题很简单,给你n个正整数,求出这n个正整数中所有任选k个相乘后的和。
Input:
输入有两行,第一行是两个整数n和k,其中1<=k<=n<=10。接下去一行就是n个正整数,保证最后结果用long即可保存。
Output:
输出只有一个正整数,为最后的和。
Sample Input:
4 2
1 2 3 4
Sample Output:
35
Source:
#include<iostream>
#include<stdio.h>
using namespace std;
int a[12],n,k,visit[12];
__int64 sum=0;
void dfs(int num,int x,int j)
{
if(num==k)
{
sum+=x;
return;
}
for(int i=1;i<=n;i++)
{
if(!visit[i]&&i>j)
{
visit[i]=1;
if(!x)
dfs(num+1,a[i],i);
else
dfs(num+1,x*a[i],i);
visit[i]=0;
}
}
}
int main()
{
memset(visit,0,sizeof(visit));
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
dfs(0,0,0);
printf("%I64d\n",sum);
return 0;
}
\