poj2392 Space Elevator(多重背包)
http://poj.org/problem?id=2392
题意:
有一群牛要上太空。他们计划建一个太空梯-----用一些石头垒。他们有K种不同类型的石头,每一种石头的高度为h_i,数量为c_i,并且由于会受到太空辐射,每一种石头不能超过这种石头的最大建造高度a_i。帮助这群牛建造一个最高的太空梯。
吐槽:
做练习的时候,连需不需要对数据排序都没分析清楚。。。下次再也不把练习安排在上午了,一般我上午状态极差(┬_┬)
这题由于数据较水,可以直接把多重背包转化为01背包求解,当然由于设定的状态不一样,写法也会不一样滴。
Code1(01背包):
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn= 410;
int dp[40010];
struct node {
int h, a, c;
bool operator <(const node& rhs) const {
return a< rhs.a;
}
};
node f[maxn]; int main()
{
int k, n, i, j, ans, maxa;
while(~scanf("%d",&n)) {
for(i=1; i<=n; i++) {
scanf("%d%d%d",&f[i].h,&f[i].a,&f[i].c);
}
sort(f+1,f+1+n);
memset(dp,0,sizeof(dp));
for(i=1; i<=n; i++) {
for(k=f[i].c; k>=1; k--){
for(j=f[i].a; j>=f[i].h; j--)
dp[j] =max(dp[j], dp[j-f[i].h]+f[i].h);
}
}
maxa = 0;
for(j=f[n].a; j>=0; j--)
if(maxa <dp[j]) maxa = dp[j];
printf("%d\n",maxa);
}
return 0;
}
Code(多重背包):
#include <cstdio>
#include <cstring>
#include <algorithm>
#define max(a,b) a>b ? a:b
using namespace std;
const int maxn= 410;
int dp[40010];
struct node {
int h, a, c;
bool operator <(const node& rhs) const {
return a< rhs.a;
}
};
node f[maxn];
void CompletePack(int C, int W, int V)
{
for(int i=C; i<=V; i++)
dp[i] = max(dp[i],dp[i-C]+W);
}
void ZeroOnePack(int C, int W, int V)
{
for(int i=V; i>=C; i--)
dp[i] = max(dp[i], dp[i-C]+W);
}
void MultipliePack(int C, int W, int M, int V)
{
if(C*M >=V) {
CompletePack(C,W,V);
return ;
}
int k=1;
while(k<M) {
ZeroOnePack(k*C,k*W,V);
M -=k;
k <<=1;
}
ZeroOnePack(C*M,W*M,V);
}
int main()
{
int k, n, i, j, ans, maxH;
while(~scanf("%d",&n)) {
for(i=0; i<n; i++) {
scanf("%d%d%d",&f[i].h,&f[i].a,&f[i].c);
}
sort(f,f+n);
memset(dp,0,sizeof(dp));
for(i=0; i<n; i++) {
MultipliePack(f[i].h,f[i].h,f[i].c,f[i].a);
}
maxH = 0;
for(i=f[n-1].a; i>=0; i--)
if(maxH < dp[i]) maxH = dp[i];
printf("%d\n",maxH);
}
return 0;
}
poj2392 Space Elevator(多重背包)的更多相关文章
- POJ 2392 Space Elevator(多重背包变形)
Q: 额外添加了最大高度限制, 需要根据 alt 对数据进行预处理么? A: 是的, 需要根据 alt 对数组排序 Description The cows are going to space! T ...
- poj 2392 Space Elevator(多重背包+先排序)
Description The cows are going to space! They plan to achieve orbit by building a sort of space elev ...
- poj2392 Space Elevator(多重背包问题)
Space Elevator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8569 Accepted: 4052 ...
- POJ2392 Space Elevator
题目:http://poj.org/problem?id=2392 一定要先按高度限制由小到大排序! 不然就相当于指定了一个累加的顺序,在顺序中是不能做到“只放后面的不放前面的”这一点的! 数组是四十 ...
- POJ 2392 Space Elevator(贪心+多重背包)
POJ 2392 Space Elevator(贪心+多重背包) http://poj.org/problem?id=2392 题意: 题意:给定n种积木.每种积木都有一个高度h[i],一个数量num ...
- POJ 2392 Space Elevator(多重背包)
显然塔的总高度不会超过最大的a[i],而a[i]之前的可以到达的高度 是由a值更小的块组成,所以按照a从小到大的顺序去转移. 然后就是多重背包判断存在性了,几乎和coin那题一样. 数据没coin丧病 ...
- poj2392 多重背包
//Accepted 868 KB 188 ms //多重背包 #include <cstdio> #include <cstring> #include <iostre ...
- POJ 2392 Space Elevator 背包题解
多重背包.本题不须要二分优化.相对简单点.由于反复数十分小,小于10. 而添加一个限制每种材料的高度做法.假设使用逆向填表,那么仅仅须要从这个高度往小递归填表就能够了. 还有就是注意要排序,以限制高度 ...
- Space Elevator [POJ2392] [DP][优化]
题目大意 n件物品,第i件hi高,有ci件,最高的一件不能超过ai的高度.问最高能堆多高 输入: 第一行,一个n 接下来每一行,为hi,ai,ci 输出,最高堆多高 样例输入: 37 40 35 23 ...
随机推荐
- 剑指offer-面试题10:二进制中1的个数
题目:请实现一个函数,输入一个函数,输出该数二进制表示中1的个数.例如把9 表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 这道题最典型的方法就是用移位统计,就比如统计9的二进制1 ...
- hdu 5441 Travel(并查集)
Problem Description Jack likes to travel around the world, but he doesn’t like to wait. Now, he is t ...
- Linux以及Android开发中的小技巧和长繁命令记录收集
不断更新收集中.... 201407161654 ssh以nx_guest的身份登录到172.24.221.137,然后在172.24.221.137与172.24.61.252的8080port建立 ...
- 淘宝弹性布局方案lib-flexible研究
1. lib-flexible不能与响应式布局兼容 先说说响应式布局的一些基本认识: 响应式布局的表现是:网页通过css媒介查询判断可视区域的宽度,在不同的范围应用不同的样式,以便在不同尺寸的设备上呈 ...
- 小谈@override
@override是jdk1.5增加的注解,主要是用来声明子类的某方法覆盖了父类的某方法.非常简单的注解,但是有个小问题: 项目最开始使用的是jdk1.6,mvc模式:接口 ----> 实现类. ...
- Spring-----8、深入理解容器中的bean
转载自:http://blog.csdn.net/hekewangzi/article/details/45648687
- W - stl 的 优先队列 Ⅲ
Description In a speech contest, when a contestant finishes his speech, the judges will then grade h ...
- 2013腾讯编程马拉松初赛第〇场(3月20日)湫湫系列故事——植树节 HDOJ 4503
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4503 思路:hint from a GOD-COW. 将每一个人模拟成图的一个点,两点连线当且仅当两人是朋 ...
- ajax数据显示,使用js通用模板
最近用ajax获取数据,上级要求要自己写一个js模板,以往看到的js模板,大都数都是在js里面拼接的,现在换一种比较简单的写法, 通过ajax获取数据源,js模板循环显示数据 function Get ...
- 使用jsonp实现ajax跨域请求
Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料. 由于同源策略,一般来说位于 server1.example.com 的网页无法 ...