问题:n个互不重复的数,通过加法凑出X,求出有多少种方案?(1<=n<=20,1<=X<=2000)
输入格式:n,x,n个整数
思路:由于n并不大,可以使用二进制枚举的方法。简单题,看代码就能够理解
#include <iostream>#include <algorithm>#include <vector>#include <stdio.h>#include <cstring>using namespace std;int num[21];int main(){ int n,x,i,j,temp,tot=0; scanf("%d%d",&n,&x); for(i=0;i<n;i++)scanf("%d",&num[i]); for(i=0;i<(1<<n);i++) { temp=0; for(j=0;j<n;j++) { if(i&(1<<j))//判断二进制i从右数第j+1位是否为1 temp+=num[j]; } if(temp==x)tot++; } PRintf("%d",tot);}
新闻热点
疑难解答