tyvj1013 - 找啊找啊找GF ——二维背包变种

题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1013

好吧,这题没节操=_=

状态f[u,v,i]表示:消费u的人民币和v的人品同时泡到i个mm所需要的最少时间。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <algorithm>
 5 using namespace std;
 6 int f[101][101][101], r[101], rp[101], t[101], rmb, RP, n, INF=0x7f7f7f7f;
 7 int main(void) {
 8     freopen("in1.txt","r",stdin);
 9     scanf("%d",&n);for(int i=1;i<=n;scanf("%d%d%d",r+i,rp+i,t+i),++i)
10         ;scanf("%d%d",&rmb,&RP);
11     for(int i=0;i<=rmb;++i)for(int j=0;j<=RP;++j)for(int k=1;k<=n;++k)f[i][j][k]=INF;
12     for(int i=1;i<=n;++i)for(int u=rmb;u>=r[i];--u)for(int v=RP;v>=rp[i];--v)for(int j=1;j<=i;++j)
13         if(f[u][v][j-1]!=INF) f[u][v][j]=min(f[u][v][j],f[u-r[i]][v-rp[i]][j-1]+t[i]);
14     for(int i=n;i>=0;--i)if(f[rmb][RP][i]!=INF){printf("%d\n",f[rmb][RP][i]);break;}
15     return 0;
16 }

为了使泡到的mm尽量多,所以要从后往前找合法的解,只要找到就输出,然后break;

=_=

posted on 2013-07-07 16:51  aries__liu  阅读(219)  评论(0编辑  收藏  举报