标签:border ges mem 运行 mes 农夫 -- gif com
这真的是一个糟糕的问题
因为没有Steam :)
显然这道题写的就让人很想写DP
记录两个状态:当前平台买不买,然后针对游戏进行背包
因此我们用F和G记录当前平台买或不买
剩下的代码讲述的比我更清晰
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 using namespace std; 5 6 int f[55][101010],g[55][101010]; 7 int n,m,p,cnt,w,v; 8 9 int main(){ 10 scanf("%d%d",&n,&m); 11 12 memset(f,0x80,sizeof(f)); 13 memset(g,0x80,sizeof(g)); 14 15 for(int i = 0;i <= m;i++) f[0][i] = g[0][i] = 0; 16 17 for(int i = 1;i <= n;i++){ 18 scanf("%d%d",&p,&cnt); 19 20 for(int j = m;j >= 0;j--){ 21 f[i][j] = max(f[i-1][j],g[i-1][j]); 22 if(j >= p) g[i][j] = max(f[i-1][j-p],g[i-1][j-p]); 23 }while(cnt--){ 24 scanf("%d%d",&w,&v); 25 for(int j = m;j >= w;j--) 26 g[i][j] = max(g[i][j],g[i][j-w]+v); 27 } 28 } 29 30 printf("%d",max(f[n][m],g[n][m])); 31 32 return 0; 33 }
[BZOJ] 1775: [Usaco2009 Dec]Vidgame 电视游戏问题
标签:border ges mem 运行 mes 农夫 -- gif com
原文地址:http://www.cnblogs.com/Chorolop/p/7618362.html