得到整数X(二进制枚举)

某君有 n n 个互不相同的正整数,现在他要从这 n n 个正整数之中无重复地选取任意个数,并仅通过加法凑出整数 X X

求某君有多少种不同的方案来凑出整数 X X

输入格式

第一行,输入两个整数 n , X ( 1 n 20 , 1 X 2000 ) n,X(1 \leq n \leq 20, 1 \leq X \leq 2000)

接下来输入 n n 个整数,每个整数不超过 100 100

输出格式

输出一个整数,表示能凑出 X ? X? 的方案数。

样例输入

6 6

1 2 3 4 5 6

样例输出

4

#include <iostream>
using namespace std; 
int main() {
	int n;
	int a[1000];
	int X;
	cin>>n>>X;
	int num=0;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i=0;i<(1<<n);i++)  //由于是n个数,所以二进制表示则有n位,所以就小于(1<<n) 
	{
		int sum=0; 
		for(int j=0;j<n;j++)
		{
			
			if(i&(1<<j))  //满足就进行累加
			{
				sum=sum+a[j];
			}
		}
		if(sum==X)
		{
			num++;
		}
	} 
	cout<<num<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wait_13/article/details/86532802