某君有 n个互不相同的正整数,现在他要从这 n 个正整数之中无重复地选取任意个数,并仅通过加法凑出整数X 。
求某君有多少种不同的方案来凑出整数 。
输入格式
第一行,输入两个整数 n,X。(1≤n≤20,1≤X≤2000),X(1≤n≤20,1≤X≤2000)
接下来输入 n 个整数,每个整数不超过100 。
输出格式
输出一个整数,表示能凑出 X 的方案数。
样例输入
6 6
1 2 3 4 5 6
样例输出
4
题解:
重点在无重复,任意个数
代码:
#include<iostream>
using namespace std;
int main()
{
int n, X, s=0;
int a[20];
cout << "请输入n的大小:";
cin >> n;
cout << "请输入X的值:";
cin >> X;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
int t=0;
for (int j = 0; j < n; j++)
{
if (i&(1 << j)) //****
t += a[j];
}
if (n == X)
s++;
}
cout << s;
return 0;
}