超市促销,总共给出m个赠品,要求选出数量为n的赠品并使其价值与给定促销价值val相等,求总共可选择的方法.
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int num, totalval,neeedednum, singleval;//num:所有的赠品数量,totalval:赠品总价值,needednum:可选择的赠品数量,singleval:单个赠品价值
cin >> num;
cin >> totalval;
cin >> neeedednum;
vector<int> valnum(num);
int sum=0, prezentnum=0;
int ans = 0;
for (int i = 0; i < num; i++)
{
cin >> singleval;
valnum[i]=singleval;
}
int statement = 1 << num; //从num中选择,共有2^num-1种情况
for (int i = 0; i < statement; i++)
{
for (int j = 0; j < num; j++)
{
if (((i >> j) & 1) == 1)
{
sum += valnum[j];
prezentnum++;
}
}
if (prezentnum == neeedednum && sum == totalval)
{
ans++;
}
sum = 0;
prezentnum = 0;
}
cout << ans;
return 0;
}