openjudge-NOI 2.6-1775 采药
题目链接: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 }