您的位置:首页 > 其它

【二进制枚举】求在n个数中取任意个数加起来组成x的方案数

2017-02-08 18:31 232 查看
问题: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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐