0-1背包问题,调试通过,切记一维滚动数组的输出为b[j+1]
#include<stdio.h> #include<string.h> int max(int a, int b) { if(a>b) return a; else return b; } int main() { int b[1200]; int n, x, pi[1200], mi[1200], i, j; while(~scanf("%d%d", &n, &x)) //scanf("%d%d", &n, &x); { memset(b, 0, sizeof(b)); for(i = 0;i<n;i++) { scanf("%d%d", &pi[i], &mi[i]); } for(i = 0;i<n;i++) { for(j = x;j>=pi[i];j--) { b[j] = max(b[j], b[j-pi[i]]+mi[i]); } } printf("%d\n",b[j+1]); } return 0; }