K数和 查看测评数据信息
输入n个整数,从中选取K个,使得它们的和恰好是0,问有多少种选择方案。
例如: n=5,K=2 , 数为:3 2 -2 -3 -2。答案是3.
请用递归方法解决这个问题。
输入格式
第一行2个正整数n和K,n范围[2,20] ,k范围[2,5]。
第二行n个整数范围[-20,20]。
输出格式
一个整数。
输入/输出例子1
输入:
6 3
6 1 7 -8 -1 2
输出:
2
#include<bits/stdc++.h>
using namespace std;
int used[20];
int a[100],cnt=0;
int ans[20];
int N,M;
void check(){
int sum=0;
for(int i=1;i<=M;i++)
{
sum+=a[ans[i]];
}
if(sum==0)
cnt++;
}
void com(int step){
if (step>M) {
check();
return ;
}
for (int j=ans[step-1]+1;j<=N;j++){
if(used[j]==0){
used[j]=1;
ans[step]=j;
com(step+1);
used[j]=0;
}
}
}
int main(){
cin>>N>>M;
for(int i=1;i<=N;i++)
{
cin>>a[i];
}
com(1);
cout<<cnt;
return 0;
}