只绿了一个点
#include<bits/stdc++.h>
using namespace std;
int n;
int a[7] = {0, 1, 2, 3, 5, 10, 20};
int v[1000];
int f[1000][1000];
int main()
{
int i, j = 1, k, l;
int num, cnt = 0;
f[0][0] = 1;
for(i = 1; i <= 6; i++)
{
cin >> num;
l = j;
for(j = l; j <= l + num - 1; j++)
{
v[j] = a[i];
cnt += a[i];
}
}
k = j - 1;
for(i = 1; i <= k; i++)
{
for(j = 0; j <= cnt; j++)
{
if(j < v[i])
{
f[i][j] = f[i - 1][j];
}
else
{
f[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + 1);
}
}
}
printf("Total=%d", f[k][cnt]);
return 0;
}