HDU-2159 FATE(完全背包)

来源:互联网 发布:股票数据 matlab 编辑:程序博客网 时间:2024/06/05 09:23

FATE

Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 4 Accepted Submission(s) : 4
Problem Description
最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能升掉这最后一级吗?

Input
输入数据有多组,对于每组数据第一行输入n,m,k,s(0 < n,m,k,s < 100)四个正整数。分别表示还需的经验值,保留的忍耐度,怪的种数和最多的杀怪数。接下来输入k行数据。每行数据输入两个正整数a,b(0 < a,b < 20);分别表示杀掉一只这种怪xhd会得到的经验值和会减掉的忍耐度。(每种怪都有无数个)

Output
输出升完这级还能保留的最大忍耐度,如果无法升完这级输出-1。

Sample Input
10 10 1 10
1 1
10 10 1 9
1 1
9 10 2 10
1 1
2 2

Sample Output
0
-1
1

刚看 好懵逼 , 完全不知道如何入手。 知道肯定使用完全背包做的, 无线打怪 虽然有上限。

主要是有3个变量, 一个忍耐度,一个经验, 一个打怪数目,那我们不妨去建立一个二维背包。 2个下标分别对应 忍耐度和打怪数数目, dp值代表经验。

既然知道是 二维背包,那么理应是多了一层for循环啊
最外层for循环就代表着 每种怪。

而最后找忍耐力的最小值时,从小到大遍历一遍 遇到经验值大于n的就立即输出就好了

code:

#include <stdio.h>#include <iostream>#include <bits/stdc++.h>using namespace std;int a[1003], b[1003];int dp[1003][1003];int main(){    int m, n, k, s;    while (~scanf("%d%d%d%d",&n, &m, &k, &s))    {        for (int i=0; i<k; i++)        {            scanf("%d%d",&a[i],&b[i]);        }         memset(dp,0,sizeof(dp));         for (int i=0; i<k; i++)         {             for (int j=b[i]; j<=m; j++)             {                 for (int k=1; k<=s; k++)                 {                     dp[j][k] = max(dp[j][k], dp[j-b[i]][k-1]+a[i]);                 }             }         }         int flag=0;         for(int i=1;i<=m;i++)        {            for(int j=1;j<=s;j++)            {                if(dp[i][j]>=n)                {                    printf("%d\n",m-i);                    flag=1;                    break;                }            }            if (flag==1)                break;        }        if (flag==0)            printf ("-1\n");    }    return 0;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 csgo掉白银坑了怎么办 错过教资认定现场确认怎么办 乡村建设导致民房开裂怎么办 项目部公章丢了怎么办 手机掉了没有卡怎么办 苹果系统软件删了还是出现怎么办 钉钉检测到作弊怎么办 电脑麦说话声音小怎么办 穿越火线麦克风有杂音怎么办 手闲不住就抠东西怎么办 大便堵在肛门口怎么办 在外地流量不够用怎么办 电脑键盘数字键没反应怎么办 音响音量键坏了怎么办 摩托罗拉移动电话通话没声音怎么办 摩托罗拉对讲机充电座坏了怎么办 手机导航键太灵敏怎么办 经侦大队不立案怎么办 槐茂酱菜太咸怎么办 法院执法局执法不公怎么办 搞养殖卖不出去怎么办 孔雀吃了蚯蚓该怎么办 多肉幼苗长徒了怎么办 小鸵鸟嘴断了怎么办 武汉早谢怎么办博大直上 威猛先生伤手了怎么办 嗓子眼边条线下边长块肉怎么办 线长在肉里怎么办 北京买车没有号怎么办 租的车处理违章怎么办 以租代购车不要怎么办 订车的合同掉了怎么办 买车合同丢了怎么办 车的证件都丢了怎么办 桃树直立的徒长枝怎么办 月季花长了独枝怎么办? 6岁半B超没子宫怎么办 学生学籍号和身份证号不一致怎么办 学生学籍号和身份证号不一样怎么办 领导交代的任务完不成怎么办 洗衣机里的衣服有味道怎么办