继--背包训练 01背包专栏
1. RQNOJ 2
状态方程:dp[j]=max(dp[j],dp[j-v[i]]+v[i]*w[i]);
1 #include<cstdio> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 int v[30],w[30],dp[30005]; 6 int main() 7 { 8 int money,num,i,j,k; 9 while(scanf("%d%d",&money,&num)!=EOF) 10 { 11 for(i=0; i<num; i++) 12 scanf("%d%d",&v[i],&w[i]); 13 memset(dp,0,sizeof(dp)); 14 for(i=0; i<num; i++) 15 for(j=money; j>=v[i]; j--) 16 { 17 dp[j]=max(dp[j],dp[j-v[i]]+v[i]*w[i]); 18 } 19 printf("%d\n",dp[money]); 20 } 21 return 0; 22 }