B 维背包+完全背包 Hdu2159
<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的更多相关文章
- 2159 ACM 杭电 杀怪 二维费用的背包+完全背包问题
题意:已知经验值,保留的忍耐度,怪的种数和最多的杀怪数.求进入下一级的最优方案. 思路:用二维费用的背包+完全背包问题 (顺序循环)方法求解 什么是二维费用的背包问题? 问题: 二维费用的背包问题是指 ...
- HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)
HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...
- 背包!背包!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= ...
- dp--01背包,完全背包,多重背包
背包问题 以下代码 n是物品个数,m是背包容积 物品价值和重量int v[maxn],w[maxn]; 01背包 模板 for(int i = 0; i < n; i++) { for(int ...
- POJ 3260 多重背包+完全背包
前几天刚回到家却发现家里没网线 && 路由器都被带走了,无奈之下只好铤而走险尝试蹭隔壁家的WiFi,不试不知道,一试吓一跳,用个手机软件简简单单就连上了,然后在浏览器输入192.168 ...
- 【poj3260-最少找零】多重背包+完全背包
多重背包+完全背包. 买家:多重背包:售货员:完全背包: 开两个数组,分别计算出买家,售货员每个面额的最少张数. 最重要的是上界的处理:上界为maxw*maxw+m(maxw最大面额的纸币). (网上 ...
- POJ 3260 The Fewest Coins(多重背包+全然背包)
POJ 3260 The Fewest Coins(多重背包+全然背包) http://poj.org/problem?id=3260 题意: John要去买价值为m的商品. 如今的货币系统有n种货币 ...
- (hdu)5234 Happy birthday 二维dp+01背包
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5234 Problem Description Today is Gorwin’s birt ...
- POJ 1787 Charlie's Change (完全背包/多重背包,输出方案的物品个数)
网上说是多重背包,因为要输出方案,还要记录下路径,百度一下题解就可以. 自己做的时候,还没了解过多重背包,该题直接往完全背包思考了.咖啡的钱看作总的背包容量,1.5.10.25分别代表四种物品的重量, ...
随机推荐
- 用bootstrap做一个背景可轮转的登录界面
用bootstrap做一个背景可轮转的登录界面 一.总结 一句话总结:用css3的动画的 @keyframes 规则,制作轮转图. 1.用bootstrap做一个背景可轮转的登录界面? a.动画部分用 ...
- 前端项目课程3 jquery1.8.3到1.11.1有了哪些新改变
web项目课程3 jquery1.8.3到1.11.1有了哪些新改变 一.总结 一句话总结:领会官方升级的意思. 1.live(); 2.die(); 3.bind(); 4.u ...
- 8、摄像头驱动_Linux的V4L2架构分析
V4L2架构可以参考 linux-3.4.2\Documentation\video4linux\v4l2-framework.txt V4L2全名为Video For Linux 2,它是针对Li ...
- 3930: [CQOI2015]选数|递推|数论
题目让求从区间[L,H]中可反复的选出n个数使其gcd=k的方案数 转化一下也就是从区间[⌈Lk⌉,⌊Hk⌋]中可反复的选出n个数使其gcd=1的方案数 然后f[i]表示gcd=i的方案数.考虑去掉全 ...
- (二)SSO之CAS框架单点退出,自己定义退出界面.
用CAS的退出,仅仅能使用它自己的那个退出界面,假设有这种要求, 要求退出后自己主动跳转到登录界面, 该怎样做呢? 以下这篇文章实现了退出后能够自己定义跳转界面. 用了CAS,发现退出真是个麻烦事,退 ...
- LLRB——红黑树的现代实现
一.本文内容 以一种简明易懂的方式介绍红黑树背后的逻辑实现2-3-4树,以及红黑树的插入.删除操作,重点在2-3-4树与红黑树的对应关系上,并理清红黑树相关操作的来龙去脉.抛弃以往复杂的实现,而分析红 ...
- 详解HTML的a标签(超链接标签)
原文 简书原文:https://www.jianshu.com/p/d6a2499db73b 大纲 1.什么是<a>标签 2.<a>标签的几个重要属性 3.a标签的运行机制 4 ...
- oracle 基础表 mysql版
emp 员工表(empno 员工号/ename 员工姓名/job 工作/mgr 上级编号/hiredate 受雇日期/sal 薪金/comm 佣金/deptno 部门编号) dept 部门表(dept ...
- 【t084】数列
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 一个数列定义如下:f(1) = 1,f(2) = 1,f(n) = (A * f(n - 1) + B ...
- VS关于 _CRT_SECURE_NO_WARNINGS 警告说明
在VS中调用 strcpy.strcat 等函数时会提示 _CRT_SECURE_NO_WARNINGS 警告.原因是这些函数不安全.可能会造成内存泄露等. 所以建议採用带_s的函数,如strcpy_ ...