可知总重量上界为1000,则状态定义f(i,j)表示只从前i种物品中选择,使得总重量不超过1000的情况下数量的最大值
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1010;
int v[6] = {1, 2, 3, 5, 10, 20}, s[6];
int dp[N];
signed main(){
for(int i = 0; i < 6; i++) cin >> s[i];
for(int i = 0; i < 6; i++)
for(int j = N; j; j--)
for(int k = 1; k * v[i] <= j && k <= s[i]; k++)
dp[j] = max(dp[j], dp[j - k * v[i]] + k);
printf("Total=%d\n", dp[N]);
return 0;
}