1 /*
 2 连接:http://noi.openjudge.cn
 3 易错点:递推的一个分支忘了写了。所以每一个下标组合都要处理到 
 4 
 5 */ 
 6 
 7 #include<iostream>
 8 #include<cstring>
 9 using namespace std;
10 const int MAXT=1005;
11 const int MAXM=105;
12 int dp[MAXM][MAXT];
13 int ti[MAXM];
14 int v[MAXM];
15 int main()
16 {
17     int m,t;
18     cin>>t>>m;
19     for(int i=1;i<=m;i++)
20     {
21         cin>>ti[i]>>v[i];
22     }
23     
24     memset(dp,0,sizeof(dp));
25     for(int i=1;i<=m;i++)//前i个草药 
26     {
27         for(int j=0;j<=t;j++)
28         {
29             if(j>=ti[i])
30             {
31                 dp[i][j]=max(dp[i-1][j],dp[i-1][j-ti[i]]+v[i]);
32             }
33             else//这个分支漏掉了…… 
34             {
35                 dp[i][j]=dp[i-1][j];
36             } 
37         }
38     }
39     
40     cout<<dp[m][t]<<endl;
41     return 0;
42 }

 

 posted on 2019-03-29 20:00  Goven  阅读(98)  评论(0)    收藏  举报