题目描述

The cows are building a roller coaster! They want your help to design as fun a roller coaster as possible, while keeping to the budget.

The roller coaster will be built on a long linear stretch of land of length L (1 ≤ L ≤ 1,000). The roller coaster comprises a collection of some of the N (1 ≤ N ≤ 10,000) different interchangable components. Each component i has a fixed length Wi (1 ≤ Wi ≤ L). Due to varying terrain, each component i can be only built starting at location Xi (0 ≤ Xi ≤ L - Wi). The cows want to string together various roller coaster components starting at 0 and ending at L so that the end of each component (except the last) is the start of the next component.

Each component i has a "fun rating" Fi (1 ≤ Fi ≤ 1,000,000) and a cost Ci (1 ≤ Ci ≤ 1000). The total fun of the roller coster is the sum of the fun from each component used; the total cost is likewise the sum of the costs of each component used. The cows' total budget is B (1 ≤ B ≤ 1000). Help the cows determine the most fun roller coaster that they can build with their budget.

输入输出格式

输入格式:

Line 1: Three space-separated integers: L, N and B.

Lines 2..N+1: Line i+1 contains four space-separated integers, respectively: Xi, Wi, Fi, and Ci.

输出格式:

Line 1: A single integer that is the maximum fun value that a roller-coaster can have while staying within the budget and meeting all the other constraints. If it is not possible to build a roller-coaster within budget, output -1.

输入输出样例

输入样例#1 复制

5 6 10
0 2 20 6
2 3 5 6
0 1 2 1
1 1 1 3
1 2 5 4
3 2 10 2

输出样例#1 复制

17

说明

Taking the 3rd, 5th and 6th components gives a connected roller-coaster with fun value 17 and cost 7. Taking the first two components would give a more fun roller-coaster (25) but would be over budget.

算法分析

题意:

奶牛们正打算造一条过山车轨道.她们希望你帮忙,找出最有趣,但又符合预算 的方案. 过山车的轨道由若干钢轨首尾相连,由x=0处一直延伸到X=L(1≤L≤1000)处.现有N(1≤N≤10000)根钢轨,每根钢轨的起点 Xi(0≤Xi≤L- Wi),长度wi(l≤Wi≤L),有趣指数Fi(1≤Fi≤1000000),成本Ci(l≤Ci≤1000)均己知.请确定一 种最优方案,使得选用的钢轨的有趣指数之和最大,同时成本之和不超过B(1≤B≤1000).

分析:

二维背包问题

DP[i][j]表示在i位置花费为j时最大有趣值。

初始化:DP[i][j]为-1

DP[0][0]=0

状态转移方程:dp[a[i].e][j]=max(dp[a[i].e][j],dp[a[i].s][j-a[i].c]+a[i].f);

状态转移方程条件:if(dp[a[i].s][j-a[i].c]>=0)  //判断起点是否可以走得通

代码实现

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<deque>
#include<queue>
#include<list>
using namespace std;
const double eps = 1e-8;
typedef long long LL;
typedef unsigned long long ULL;
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const LL LL_INF = 0x3f3f3f3f3f3f3f3f;
const LL LL_M_INF = 0x7f7f7f7f7f7f7f7f;
const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
const int MOD = 1e9 + 7;
const double pi = acos(-1.0);
const int MAXN = 1e5 + 10;
const int MAXT = 10000 + 10;
const int M=10010;
struct node
{int s,e,f,c;
};
bool cmp(const node &a,const node &b)
{if(a.s==b.s)return a.e<b.e;else return a.s<b.s;
}
node a[10010];
int dp[1010][1010];
int main()
{int l,n,b;while(scanf("%d%d%d",&l,&n,&b)!=EOF){for(int i=1;i<=n;i++){int t;scanf("%d%d%d%d",&a[i].s,&t,&a[i].f,&a[i].c);a[i].e=a[i].s+t;}sort(a+1,a+n+1,cmp);memset(dp,-1,sizeof(dp));dp[0][0]=0;for(int i=1;i<=n;i++)for(int j=b;j>=a[i].c;j--){if(dp[a[i].s][j-a[i].c]>=0)  //判断起点是否可以走得通dp[a[i].e][j]=max(dp[a[i].e][j],dp[a[i].s][j-a[i].c]+a[i].f);}int ans=-1;for(int i=1;i<=b;i++)ans=max(ans,dp[l][i]) ;printf("%d\n",ans);}return 0;
}

POJ 3257 Cow Roller Coaster 二维背包相关推荐

  1. POJ - 3257 Cow Roller Coaster (背包)

    题目大意:要用N种材料建一条长为L的路,如今给出每种材料的长度w.起始地点x.发费c和耐久度f 问:在预算为B的情况下,建好这条路的最大耐久度是多少 解题思路:背包问题 dp[i][j]表示起始地点为 ...

  2. HDU-2159 FATE 二维背包

    这题是一个二维背包的题目,刚开始并没有那样去做,只开了一维的空间来存储状态,结果很多的数据都没有跑过去.其实这题这样来问的话可能就明了很多了,求在指定的容忍值和指定的杀怪数下,求最大能够得到了经验数, ...

  3. HDU-2159 FATE 二维背包

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. 杭电2159-FATE (二维背包运用+详细解释)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. c++ 动态规划-二维背包 and 潜水员问题

    动态规划 - 二维背包 1.普通二维(费用)背包 01背包问题:给定 n 种物品和一个重量(容量)(限定条件)为 w 的背包,物品 i 的重量是 wi,其价值为 vi.(每种物品只有一个)问:如何选择 ...

  6. 背包问题(恰好背满 二维背包) 总结

    专题训练:点击打开链接  密码:JXFEACM 他人总结:点击打开链接  背包九讲:点击打开链接 其实核心记住: 背包是组合问题 填充性质 元素之间没关系 1. 01背包(右->左) 恰好装满( ...

  7. dp之二维背包poj1837(天平问题 推荐)

    题意:给你c(2<=c<=20)个挂钩,g(2<=g<=20)个砝码,求在将所有砝码(砝码重1~~25)挂到天平(天平长  -15~~15)上,并使得天平平衡的方法数..... ...

  8. 动态规划 —— 背包问题 P05 —— 二维背包

    [问题] 对于每件物品,具有两种不同的体积,选择这件物品必须同时付出这两种代价,对于每种代价都有一个可付出的最大值(背包容量). 问:怎样选择物品可以得到最大的价值? 设:这两种代价分别为代价1和代价 ...

  9. HDU2159 FATE(二维背包、带限制条件的背包问题)

    题目传送门 题意很明显,就不细说了 我们这里可以把剩下的忍耐度看作背包容量,然后价值就是杀了怪所得的经验 用第二维表示杀了q只怪,这样就能用dp[j][q]表示已消耗j点忍耐度,杀了q只怪时的经验值 ...

  10. UVA 10306 e-Coins (二维背包)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

最新文章

  1. JavaScript DOM 9 - 元素的尺寸与位置
  2. python dataframe数据类型_python-Pandas DataFrame,1、2、3和NaN值的默认数据类型
  3. 如何检查字符串是否包含Ruby中的子字符串?
  4. 迭代加深搜索与埃及分数求解
  5. Visual Studio各个版本对应关系
  6. 通用Excel文件导出工具类
  7. android 退出应用,如何停止服务,Android 完全退出当前应用程序的四种方法
  8. 计算机及应用学习顺序,自考计算机及应用专业经验谈
  9. 《Javascript秘密花园》学习笔记(下)
  10. 什么是磁力链接如何愉快的使用磁力链接
  11. HTTP代理和SOCKS代理有什么区别
  12. 2017年Python从入门到实战教程-徐培成-专题视频课程
  13. C语言构建连连看游戏(矩阵方式)
  14. android 水晶报表,水晶报表分组,统计,求和,sum()函数使用
  15. (莫队算法)CodeForces - 617E XOR and Favorite Number
  16. 解决java.util.ConcurrentModificationException:null
  17. 牛客刷题:放苹果(编程题)
  18. UITT不忘初心,为交易而生
  19. 【TcaplusDB君】 行业新闻汇编(5月25日)
  20. 开启子进程的两种方法

热门文章

  1. cad2010多个文件并排显示_CAD2010如何设置 使一个窗口打开多个文件,并排显示(和360浏览器类似的并排缩略)?...
  2. Netspark自动批量扫描powershell脚本
  3. 重磅开源!一款引入实时语音与声纹识别的网络辩论系统!
  4. oracle月份相减函数,Oracle 日期函数的加减
  5. 本地数据库环境搭建(PhpStudy)
  6. 扫描微信二维码实现快速登录
  7. ATLAS.ti 9(质性研究分析软件)官方中文版V9.0.20.0 | 质性分析软件Atlas.ti下载 | atlas软件是什么软件
  8. 分治法——k小元素问题
  9. OpenCV-camShift 算法
  10. AltiumDesigner画图不求人12 AD库转换为PADS库