//0-1背包问题 如果不使用循环数组,空间越界。 #include <stdio.h> int main() { int n, v, i, j; int w[3403], p[3403]; int f[12881]; scanf("%d %d", &n, &v); for(i = 1; i <= n; i++) scanf("%d %d", &w[i], &p[i]); for(i = 0; i <= v; i++) f[i] = 0; for(i = 1; i <= n; i++) { for(j = v; j >= w[i]; j--) { if(f[j - w[i]] + p[i] > f[j]) f[j] = f[j - w[i]] + p[i]; } } printf("%d/n",f[v]); return 0; }