//背包问题的变种,这里是求方案数
#include<iostream>
#include<algorithm>
#include<queue>
#include<string>
#include<vector>
using namespace std;
int main()
{
int n;//n是数量
cin>>n;
vector<int> arr(n+1);//arr是体积。40是总容量,价值是1
for(int i=1;i<=n;i++)
{
cin>>arr[i];
}
vector<int> dp(41,0);
dp[0]=1;//当背包容量为0时只有1种方案
for(int i=1;i<=n;i++)
{
for(int j=40;j>=arr[i];j--)
{
dp[j]=dp[j]+dp[j-arr[i]];
}
}
cout<<dp[40];
return 0;
}

京公网安备 11010502036488号