HDU 2159 FATE 二维费用背包

来源:互联网 发布:tensorflow feed java 编辑:程序博客网 时间:2024/05/10 22:27

题目:

https://vjudge.net/problem/HDU-2159

题解:
二维费用完全背包。
注意
读题啊!!!开始以为是求剩下的经验值,,其实是求最大的剩下的忍耐度!!!2333
代码:

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int  n,m,k,s,maxx;const int K=1000+50;const int inf=1e9+7;int val[K],wei[K],dp[K][K];void init(){    memset(dp,0,sizeof(dp));    maxx=inf;    return ;}int main(){    while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF){        init();        for(int i=1;i<=k;i++) scanf("%d%d",&val[i],&wei[i]);        for(int i=1;i<=k;i++){            for(int j=1;j<=s;j++){                for(int p=wei[i];p<=m;p++){                    dp[j][p]=max(dp[j][p],dp[j-1][p-wei[i]]+val[i]);                    if(dp[j][p]>=n){                        maxx=min(maxx,p);                    }                }            }        }        if(maxx!=inf) printf("%d\n",m-maxx);        else printf("-1\n");    }    return 0;}
原创粉丝点击