继--背包训练 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 }
View Code

 

posted @ 2017-04-14 21:03  马丁黄瓜啊  阅读(149)  评论(0编辑  收藏  举报