首页 > 其他 > 详细

hdu2159-FATE

时间:2020-05-06 00:22:48      阅读:78      评论:0      收藏:0      [点我收藏+]

题目入口
完全背包:dp[i]:耐力消耗为i时的最大经验,用num[i]记录消灭数量

#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e3+10;
int v[MAXN],w[MAXN];
int dp[MAXN];
int num[MAXN];
int main(){
    int n,m,k,s,V;
    while(cin>>V>>m>>n>>s){
        for(int i=1;i<=n;i++){
            cin>>v[i]>>w[i];
        }
        memset(dp,0,sizeof(dp));
        memset(num,0,sizeof(num));
        for(int i=1;i<=n;i++){
            for(int j=w[i];j<=m;j++){
                if(dp[j]<dp[j-w[i]]+v[i]){
                    dp[j]=dp[j-w[i]]+v[i];
                    num[j]=num[j-w[i]]+1;
                }
            }
        }
        bool ok=false;
        for(int i=1;i<=m;i++){
            if(dp[i]>=V&&num[i]<=s){
                cout<<m-i<<endl;
                ok=true;break;
            }
        }
        if(!ok)cout<<"-1"<<endl;
    }



    return 0;
}

hdu2159-FATE

原文:https://www.cnblogs.com/qq103013999/p/12833719.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!