首页 > 技术文章 > openjudge-NOI 2.6-1775 采药

xqmmcqs 2016-10-20 16:14 原文

题目链接:http://noi.openjudge.cn/ch0206/1775/

题解:
  很经典的01背包问题,设时间为t,价值为v

  一维压缩,状态转移方程fj=max(fj,fj-ti+vi)

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 #define MAXM 1010
 5 #define MAXN 110
 6 int n,m,t[MAXN],v[MAXN],f[MAXM];
 7 int main()
 8 {
 9     scanf("%d%d",&m,&n);
10     for(int i=1;i<=n;i++)scanf("%d%d",&t[i],&v[i]);
11     for(int i=1;i<=n;i++)
12     {
13         for(int j=m;j>=t[i];j--)
14         {
15             f[j]=max(f[j],f[j-t[i]]+v[i]);
16         }
17     }
18     printf("%d\n",f[m]);
19     return 0;
20 }

 

推荐阅读