<span style="color:#3333ff;">/*
————————————————————————————————————————————————————————————————————————————————————————————————
author : Grant Yuan
time : 2014.7.19
aldorithm: 二维背包+全然背包 ————————————————————————————————————————————————————————————————————————————————————————————————
B - 二维费用背包 基础
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit Status
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
*/
//滚动数组做法
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define INF 9999999;
using namespace std; int dp[2][105][105];
int exp,exd,num,kid;
//exp:经验 ;exd: 忍耐度; num:怪的个数; kid:怪的种类;
//dp[前i种怪][已经杀了j个怪][消耗k的忍耐度]=所获得经验的最大值
int b[105],a[105]; int main()
{
while(~scanf("%d%d%d%d",&exp,&exd,&kid,&num)){ for(int i=0;i<kid;i++)
scanf("%d%d",&a[i],&b[i]);
memset(dp,0,sizeof(dp)); for(int i=0;i<kid;i++)//种类
for(int j=1;j<=num;j++)//杀怪的个数
for(int k=0;k<=exd;k++)//消耗的忍耐度
{
if(k>=b[i])
dp[(i+1)&1][j][k]=max(dp[(i+1)&1][j-1][k-b[i]]+a[i],dp[i&1][j][k]);
else
dp[(i+1)&1][j][k]=dp[i&1][j][k];
} int m=INF;
if(dp[kid&1][num][exd]<exp)
printf("-1\n");
else {//寻找最小的忍耐度
for(int k=0;k<=exd;k++)
if(dp[kid&1][num][k]>=exp&&k<m)
m=k;
cout<<exd-m<<endl;
}
}
return 0;
} #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define INF 9999999;
using namespace std; int dp[105][105];
int exp,exd,num,kid;
//exp:经验 ;exd: 忍耐度; num:怪的个数; kid:怪的种类;
//dp[前i种怪][已经杀了j个怪][消耗k的忍耐度]=所获得经验的最大值
int b[105],a[105]; int main()
{
while(~scanf("%d%d%d%d",&exp,&exd,&kid,&num)){ for(int i=0;i<kid;i++)
scanf("%d%d",&a[i],&b[i]);
memset(dp,0,sizeof(dp)); for(int i=0;i<kid;i++)//种类
for(int j=1;j<=num;j++)//杀怪的个数
for(int k=exd;k>=b[i];k--)//消耗的忍耐度
{
dp[j][k]=max(dp[j-1][k-b[i]]+a[i],dp[j][k]);
}
int m=INF;
if(dp[num][exd]<exp)
printf("-1\n"); else {//寻找最小的忍耐度
for(int k=0;k<=exd;k++)
if(dp[num][k]>=exp&&k<m)
m=k;
cout<<exd-m<<endl;
}
}
return 0;
}
</span>

版权声明:本文博主原创文章,博客,未经同意不得转载。

B 维背包+完全背包 Hdu2159的更多相关文章

  1. 2159 ACM 杭电 杀怪 二维费用的背包+完全背包问题

    题意:已知经验值,保留的忍耐度,怪的种数和最多的杀怪数.求进入下一级的最优方案. 思路:用二维费用的背包+完全背包问题 (顺序循环)方法求解 什么是二维费用的背包问题? 问题: 二维费用的背包问题是指 ...

  2. HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)

    HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...

  3. 背包!背包!HDU 2602 Bone Collector + HDU 1114 Piggy-Bank + HDU 2191 512

    http://acm.hdu.edu.cn/showproblem.php?pid=2602 第一题 01背包问题 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  4. dp--01背包,完全背包,多重背包

    背包问题 以下代码 n是物品个数,m是背包容积 物品价值和重量int v[maxn],w[maxn]; 01背包 模板 for(int i = 0; i < n; i++) { for(int ...

  5. POJ 3260 多重背包+完全背包

    前几天刚回到家却发现家里没网线 && 路由器都被带走了,无奈之下只好铤而走险尝试蹭隔壁家的WiFi,不试不知道,一试吓一跳,用个手机软件简简单单就连上了,然后在浏览器输入192.168 ...

  6. 【poj3260-最少找零】多重背包+完全背包

    多重背包+完全背包. 买家:多重背包:售货员:完全背包: 开两个数组,分别计算出买家,售货员每个面额的最少张数. 最重要的是上界的处理:上界为maxw*maxw+m(maxw最大面额的纸币). (网上 ...

  7. POJ 3260 The Fewest Coins(多重背包+全然背包)

    POJ 3260 The Fewest Coins(多重背包+全然背包) http://poj.org/problem?id=3260 题意: John要去买价值为m的商品. 如今的货币系统有n种货币 ...

  8. (hdu)5234 Happy birthday 二维dp+01背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5234 Problem Description Today is Gorwin’s birt ...

  9. POJ 1787 Charlie's Change (完全背包/多重背包,输出方案的物品个数)

    网上说是多重背包,因为要输出方案,还要记录下路径,百度一下题解就可以. 自己做的时候,还没了解过多重背包,该题直接往完全背包思考了.咖啡的钱看作总的背包容量,1.5.10.25分别代表四种物品的重量, ...

随机推荐

  1. 【42.86%】【Codeforces Round #380D】Sea Battle

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. SQL基础总结——20150730

           SQL SQL 指结构化查询语言 SQL 使我们有能力訪问数据库 SQL 是一种 ANSI(美国国家标准化组织) 的标准计算机语言 SQL 是一门 ANSI 的标准计算机语言.用来訪问和 ...

  3. [TypeStyle] Load raw CSS in TypeStyle

    TypeStyle tries to be an all in one CSS in JS management solution so you can always fall back to raw ...

  4. PHP 正则截取符合条件的字符串成为数组

    $str2 = '<p>678678<em>111111<img src="http://www.XXX.top/upload/image/20180709/1 ...

  5. Matlab-------regexp正则表达式

    转自原文 Matlab-------regexp正则表达式 句点符号 '.' ——匹配任意一个(只有一个)字符(包括空格). 例如:t.n,它匹配tan. ten.tin和ton,还匹配t#n.tpn ...

  6. php解析xml字符串

    <?php $content = <<<XML <?xml version="1.0" encoding="UTF-8"?> ...

  7. QQ互联API接口失效,第三方网站的死穴

    最近2个月,用开源程序WeCenter搭建了一个社交问答网站. 为了方便用户注册,开通了QQ登录功能. 今天,突然发现QQ互联返回一直出现错误.     度娘了很久,发现大家都遇到这个问题了.Disc ...

  8. windows下python安装uwsgi

    1.使用pip安装 pip install uwsgi 报错:os没有uname() 解决: 定位到uwsgiconfig.py文件中,首先import platform后,将os.unam()都改为 ...

  9. 【p081】ISBN号码

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定 ...

  10. Spring MVC学习:配置简解

    http://blog.csdn.net/heirenheiren/article/details/41485485