题目链接:

http://poj.org/problem?id=2392

题意:

给你k类方块,每类方块ci个,每类方块的高度为hi,现在要报所有的方块叠在一起,每类方块的任何一个部分都不能出现在ai以上的高度,问这些方块能叠的最高高度。

题解:

首先按ai升序排序,尽量让高度限制低的先排掉,如果不这样做一些转移会失效掉:

比如:h1=3,a1=3;h2=4,a2=7

如果先搭1再搭2则合法,但反过来则变成无效的转移了。

处理好顺序之后跑一遍背包就可以了,因为最大高度为40000,比较小,所以用判定的方式跑一遍就可以了。

代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; const int maxn = + ;
const int maxm = ; int k;
int dp[maxn],used[maxn];
int hi[maxm], ai[maxm], ci[maxm]; int ran[maxm];
bool cmp(int x,int y) {
return ai[x] < ai[y];
} void init() {
memset(dp, , sizeof(dp));
for (int i = ; i < k; i++) ran[i] = i;
} int main() {
while (scanf("%d", &k) == && k) {
init();
for (int i = ; i < k; i++) {
scanf("%d%d%d", hi + i, ai + i, ci + i);
}
sort(ran, ran + k,cmp);
dp[] = ;
for (int i = ; i < k; i++) {
int t = ran[i];
memset(used, , sizeof(used));
for (int h = hi[t]; h <= ai[t]; h++) {
//dp[h]==0一定也要记得写,这里也是个贪心
if (dp[h]==&&dp[h - hi[t]] && used[h - hi[t]] + <= ci[t]) {
dp[h] = ; used[h] = used[h - hi[t]] + ;
}
}
}
int ans = ;
for (int i = ; i >= ; i--) if (dp[i]) {
ans = i; break;
}
printf("%d\n", ans);
}
return ;
}

总结:

这题和经典的多重背包问题还是有些差别的:

这题是求给定一系列元素的高度,个数,高度限制,求最大高度。

而经典多重背包问题是给定一系列元素的价值,体积,体积限制,求最大价值。

POJ 2392 Space Elevator 贪心+dp的更多相关文章

  1. POJ 2392 Space Elevator(贪心+多重背包)

    POJ 2392 Space Elevator(贪心+多重背包) http://poj.org/problem?id=2392 题意: 题意:给定n种积木.每种积木都有一个高度h[i],一个数量num ...

  2. poj 2392 Space Elevator(多重背包+先排序)

    Description The cows are going to space! They plan to achieve orbit by building a sort of space elev ...

  3. POJ 2392 Space Elevator(多重背包变形)

    Q: 额外添加了最大高度限制, 需要根据 alt 对数据进行预处理么? A: 是的, 需要根据 alt 对数组排序 Description The cows are going to space! T ...

  4. poj[2392]space elevator

    Description The cows are going to space! They plan to achieve orbit by building a sort of space elev ...

  5. POJ 2392 Space Elevator DP

    该题与POJ 1742的思路基本一致:http://www.cnblogs.com/sevenun/p/5442279.html(多重背包) 题意:给你n个电梯,第i个电梯高h[i],数量有c[i]个 ...

  6. POJ 2392 Space Elevator 背包题解

    多重背包.本题不须要二分优化.相对简单点.由于反复数十分小,小于10. 而添加一个限制每种材料的高度做法.假设使用逆向填表,那么仅仅须要从这个高度往小递归填表就能够了. 还有就是注意要排序,以限制高度 ...

  7. POJ 2392 Space Elevator(多重背包)

    显然塔的总高度不会超过最大的a[i],而a[i]之前的可以到达的高度 是由a值更小的块组成,所以按照a从小到大的顺序去转移. 然后就是多重背包判断存在性了,几乎和coin那题一样. 数据没coin丧病 ...

  8. uva12486 Space Elevator(数位dp)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 题目链接:https://uva.onlinejudge.org/index.ph ...

  9. Space Elevator [POJ2392] [DP][优化]

    题目大意 n件物品,第i件hi高,有ci件,最高的一件不能超过ai的高度.问最高能堆多高 输入: 第一行,一个n 接下来每一行,为hi,ai,ci 输出,最高堆多高 样例输入: 37 40 35 23 ...

随机推荐

  1. Kafka(1)-概述

    一. 内部原理 1. 点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端.这个模型的特 ...

  2. 基于 FPGA 的 PCIE 总线 Linux 驱动设计

    硬件平台 Kintex ®-7 family of FPGAs Intel X86 软件平台 Linux 4.15.0-36-generic #39~16.04.1-Ubuntu Xilinx xap ...

  3. CTF-安恒19年二月月赛部分writeup

    CTF-安恒19年二月月赛部分writeup MISC1-来玩个游戏吧 题目: 第一关,一眼可以看出是盲文,之前做过类似题目 拿到在线网站解一下 ??41402abc4b2a76b9719d91101 ...

  4. A.Activity planning

    题目描述There is a collection of n activities E={1,2,..,n}, each of which requires the same resource, su ...

  5. Linux入门进阶第一天——vim文本编辑器

    一.VI / VIM概述 [更新]:VIM资料参见:http://www.runoob.com/linux/linux-vim.html 是什么? 是一个文本编辑器. Vim是从 vi 发展出来的一个 ...

  6. (三)虚拟机与Linux新尝试——20155306白皎

    (三)虚拟机与Linux新尝试--20155306白皎 一.关于虚拟机的安装 在选择虚拟机的类型和版本时,Ubuntu只有32位,没有64位 解决:通过百度,后来也发现同学们好多遇到了这个问题,因此通 ...

  7. mysql导入报错【The MySQL server is running with the --event-scheduler=DISABLED】

    一.问题: 在进行mysql操作导入库的时候,报出了[The MySQL server is running with the --event-scheduler=DISABLED] 查看后台日志是事 ...

  8. PostgreSQL的checkpoint能否并行

    对于此问题,在社区进行了提问,并得到了一些大牛的解答: http://postgresql.1045698.n5.nabble.com/Can-checkpoint-creation-be-paral ...

  9. Windows下安装RaibbitMQ

    1.软件准备 1.1 erlang语言包 到http://www.erlang.org/download.html下载,并且运行! 安装目录C:\Program Files (x86)\erl5.10 ...

  10. SPOJ11469 SUBSET

    题面 Farmer John's owns N cows (2 <= N <= 20), where cow i produces M(i) units of milk each day ...