这次理解的更深刻了一些。
#include <stdio.h> #include <string.h> #include <stdlib.h> int vol[1001]; int val[1001]; int dp[1001]; int main() { int n; int v; int V, N; int i; scanf("%d", &n); while (n--) { scanf("%d %d", &N, &V); for (i = 1; i <= N; i++) scanf("%d", &val[i]); for (i = 1; i <= N; i++) scanf("%d", &vol[i]); memset(dp, 0, sizeof(dp)); for (i = 1; i <= N; i++) { for (v = V; v >= vol[i]; v--) dp[v] = dp[v] > (dp[v - vol[i]] + val[i]) ? dp[v] : (dp[v - vol[i]] + val[i]); } printf("%d\n", dp[V]); } return 0; }