NWU_ACM

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5  
 6 //01背包二维正写写法
 7 int p[107],w[107],dp[107][1007];
 8 int main()
 9 {
10     int N,T;
11     scanf("%d%d",&N,&T);
12     for(int i=1;i<=N;i++)
13     {
14         scanf("%d%d",&p[i],&w[i]);
15     }
16     memset(dp,0,sizeof(dp));
17     for(int i=1;i<=N;i++)
18     {
19         for(int j=0;j<=T;j++)
20         {
21             if(j>=w[i])
22                 dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+p[i]);
23             else
24                 dp[i][j] = dp[i-1][j];
25         }
26     }
27     printf("%d",dp[N][T]);
28 }
29  
30 //01背包二维逆写写法
31 int p[107],w[107],dp[107][1007];
32 int main()
33 {
34     int N,T;
35     scanf("%d%d",&N,&T);
36     for(int i=1;i<=N;i++)
37     {
38         scanf("%d%d",&p[i],&w[i]);
39     }
40     memset(dp,0,sizeof(dp));
41     for(int i=1;i<=N;i++)
42     {
43         for(int j=T;j>=0;j--)
44         {
45             if(j>=w[i])
46                 dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+p[i]);
47             else
48                 dp[i][j] = dp[i-1][j];
49         }
50     }
51     printf("%d",dp[N][T]);
52 }
53  
54 //01背包1维写法,只能逆写
55 int p[107],w[107],dp[1007];
56 int main()
57 {
58     int N,T;
59     scanf("%d%d",&N,&T);
60     for(int i=1;i<=N;i++)
61         scanf("%d%d",&p[i],&w[i]);
62     memset(dp,0,sizeof(dp));
63     for(int i=1;i<=N;i++)
64         for(int j=T;j>=w[i];j--)
65             dp[j] = max(dp[j],dp[j-w[i]]+p[i]);
66     printf("%d",dp[T]);
67 }
View Code

 

posted on 2017-04-26 20:28  NWU_ACM  阅读(178)  评论(0编辑  收藏  举报