如果枚举每一个可以组成的重量a,如果 dp[j-a]为1,则dp[j]也设为1,res++
#include <iostream>
using namespace std;
int type[] = {0, 1, 2, 3, 5, 10, 20};
int total[10];
int sum;
int res;
int dp[1105];
int main()
{
for (int i = 1; i <= 6; i++)
{
cin >> total[i];
sum += total[i] * type[i];
}
dp[0] = 1;
for (int i = 1; i <= 6; i++)
{
for (int j = sum; j >= 0; j--)
{
if (dp[j])
{
continue;
}
else
{
for (int k = 1; k <= total[i]; k++)
{
if (dp[j - type[i] * k] && j - type[i] * k >= 0 && dp[j] == 0)
{
dp[j] = 1;
res++;
}
}
}
}
}
cout << "Total=" << res << endl;
return 0;
}