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

July 7, 2013
tyvj DP

题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1013 好吧,这题没节操=_= 状态f[u,v,i]表示:消费u的人民币和v的人品同时泡到i个mm所需要的最少时间。


#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
int f[101][101][101], r[101], rp[101], t[101], rmb, RP, n, INF=0x7f7f7f7f;
int main(void) {
    freopen("in1.txt","r",stdin);
    scanf("%d",&n);for(int i=1;i<=n;scanf("%d%d%d",r+i,rp+i,t+i),++i)
        ;scanf("%d%d",&rmb,&RP);
    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;
    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)
        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]);
    for(int i=n;i>=0;--i)if(f[rmb][RP][i]!=INF){printf("%d\n",f[rmb][RP][i]);break;}
    return 0;
}

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

comments powered by Disqus