这题是完全背包。我没有优化。
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <string.h> 5 #include <cmath> 6 #define maxn 100+10 7 #define maxC 100000+10 8 using namespace std; 9 int f[maxC]; 10 int c[maxn]; 11 int v[maxn]; 12 int main() 13 { 14 int n,i,j; 15 int maxc; 16 while(~scanf("%d",&n)) 17 { 18 for(i=1;i<=n;++i) 19 { 20 scanf("%d%d",&v[i],&c[i]); 21 } 22 scanf("%d",&maxc); 23 for(i=0;i<=maxc+10;++i) 24 { 25 f[i]=0; 26 } 27 for(i=1;i<=n;++i) 28 { 29 for(j=0;j<=maxc;++j) 30 { 31 if(j-c[i]>=0) 32 f[j]=max(f[j],f[j-c[i]]+v[i]); 33 } 34 } 35 printf("%d\n",f[maxc]); 36 } 37 return 0; 38 }