UVALive 4870 Roller Coaster --01背包
题意:过山车有n个区域,一个人有两个值F,D,在每个区域有两种选择:
1.睁眼: F += f[i], D += d[i]
2.闭眼: F = F , D -= K
问在D小于等于一定限度的时候最大的F。
解法: 用DP来做,如果定义dp[i][j]为前 i 个,D值为j的情况下最大的F的话,由于D值可能会增加到很大,所以是存不下的,又因为F每次最多增加20,那么1000次最多增加20000,所以开dp[1000][20000],dp[i][j]表示前 i 个,F值为j的情况下最小的D。
然后就是简单的01背包了。也可以转化为一维背包。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#define Mod 1000000007
using namespace std; int dp[][];
int F[],D[]; int main()
{
int n,K,Limit,i,j,FV;
while(scanf("%d%d%d",&n,&K,&Limit)!=EOF && n+K+Limit)
{
FV = ;
for(i=;i<=n;i++) { cin>>F[i]>>D[i]; FV += F[i]; }
for(i=;i<=n;i++) {
for(j=;j<=FV;j++)
dp[i][j] = Mod;
}
dp[][] = ;
for(i=;i<=n;i++) {
for(j=;j<=FV;j++) {
dp[i][j] = min(dp[i][j],max(,dp[i-][j]-K));
if(j >= F[i] && dp[i-][j-F[i]]+D[i] <= Limit)
dp[i][j] = min(dp[i][j],dp[i-][j-F[i]]+D[i]);
}
}
int maxi = ;
for(i=;i<=FV;i++) {
if(dp[n][i] <= Limit)
maxi = max(maxi,i);
}
cout<<maxi<<endl;
}
return ;
}
UVALive 4870 Roller Coaster --01背包的更多相关文章
- POJ - 3257 Cow Roller Coaster (背包)
题目大意:要用N种材料建一条长为L的路,如今给出每种材料的长度w.起始地点x.发费c和耐久度f 问:在预算为B的情况下,建好这条路的最大耐久度是多少 解题思路:背包问题 dp[i][j]表示起始地点为 ...
- 【题解】P2854 [USACO06DEC]牛的过山车Cow Roller Coaster
P2854 [USACO06DEC]牛的过山车Cow Roller Coaster 题目描述 The cows are building a roller coaster! They want you ...
- bzoj1649 [Usaco2006 Dec]Cow Roller Coaster
Description The cows are building a roller coaster! They want your help to design as fun a roller co ...
- BZOJ 1649: [Usaco2006 Dec]Cow Roller Coaster( dp )
有点类似背包 , 就是那样子搞... --------------------------------------------------------------------------------- ...
- UVALive 5066 Fire Drill BFS+背包
H - Fire Drill Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Sta ...
- 洛谷P2854 [USACO06DEC]牛的过山车Cow Roller Coaster
P2854 [USACO06DEC]牛的过山车Cow Roller Coaster 题目描述 The cows are building a roller coaster! They want you ...
- BZOJ——1649: [Usaco2006 Dec]Cow Roller Coaster
http://www.lydsy.com/JudgeOnline/problem.php?id=1649 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 7 ...
- POJ1112 Team Them Up![二分图染色 补图 01背包]
Team Them Up! Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7608 Accepted: 2041 S ...
- Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)
传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ...
随机推荐
- C#之tcp自动更新程序
.NETTCP自动更新程序有如下几步骤: 第一步:服务端开启监听 ServiceHost host; private void button1_Click(object sender, EventAr ...
- HotCode的原理及使用
1. JRbel介绍 JRebel是一套JavaEE开发工具.Jrebel可快速实现热部署,节省了大量重启时间,提高了个人开发效率.网上可搜索到破解版.JRebel是一款JAVA虚拟机插件,它使得JA ...
- JAVA 8 Streams
什么是Stream 首先要说的是,不要被它的名称骗了,这里的Stream跟JAVA I/O中的InputStream和OutputStream是两个不同的概念.Java 8中的Stream其实是函数式 ...
- VS2015开发Android,自带模拟器无法调试、加载程序,算是坑吗
VS2015出来后,确定变化很大,什么android.ios的,不在话下.对于我这样传统型的人,也第一时间试用了一下(vs2003->vs2008->vs2012->vs2015). ...
- 点击.box跟点击.box.box1
<!DOCTYPE html> <html> <head> <meta charset='UTF-8'> <title>click</ ...
- 单行文字滚动就用myslider
单行文字滚动就用myslider,myslider是一个小型的内容滚动jquery插件. 首先请看实例:http://keleyi.com/jq/myslider/demo/4.htm 然后来看代码: ...
- JavaScript toUpperCase() 方法和 toLowerCase() 方法
1,toUpperCase() 方法用于把字符串转换为大写. 一个新的字符串,在其中 stringObject 的所有小写字符全部被转换为了大写字符. 语法为: stringObject.toUppe ...
- 使用jq插入节点
.append()和.appendTo()两种方法功能相同,主要的不同是语法——内容和目标的位置不同 append()前面是要选择的对象,后面是要在对象内插入的元素内容 appendTo()前面是要插 ...
- Java Web总结
一.地址 客户端路径和服务端路径 表单:<form action="路径"></form> 超链接:<a href="路径"> ...
- IOS开发基础知识--碎片8
1:用UIImageView作为背景,但直接把按钮或者UITextField放在上面无法相应事件. 解决办法:UIImageView默认的UserInteractionEnabled是NO,把它修改成 ...