下划线部分 #include<cstdio> int max(int a, int b)//取最大值函数 { return a > b ? a : b; } struct Thing { int w; int v; }list[101]; int dp[1001]; int main() { int s, n;//背包容量和物品总数 while (scanf("%d%d", &s, &n) != EOF) { for (int i = 1; i <= n; i++) { scanf("%d%d", &list[i].w, &list[i].v);//读入每个物品的体积和价值 } for (int i = 0; i <= s; i++) dp[i] = 0;//初始化二维数组 for (int i = 1; i <= n; i++)//循环每个物品,逆序遍历j执行状态转移方程 { for (int j = s; j >= list[i].w; j--) { dp[j] = max(dp[j], dp[j - list[i].w] + list[i].v); } } printf("%d\n", dp[s]); } return 0; }
请参见: https://blog.csdn.net/qq_41063141/article/details/90181994