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(多重背包)的更多相关文章

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

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

  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. poj2392 Space Elevator(多重背包问题)

    Space Elevator   Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8569   Accepted: 4052 ...

  4. POJ2392 Space Elevator

    题目:http://poj.org/problem?id=2392 一定要先按高度限制由小到大排序! 不然就相当于指定了一个累加的顺序,在顺序中是不能做到“只放后面的不放前面的”这一点的! 数组是四十 ...

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

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

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

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

  7. poj2392 多重背包

    //Accepted 868 KB 188 ms //多重背包 #include <cstdio> #include <cstring> #include <iostre ...

  8. POJ 2392 Space Elevator 背包题解

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

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

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

随机推荐

  1. ThreadPool(线程池) in .Net

    本文来自:http://rickie.cnblogs.com/archive/2004/11/23/67275.html 在多线程的程序中,经常会出现两种情况.一种情况下,应用程序中的线程把大部分的时 ...

  2. OGG常见问题处理

    1403: ORA-01403: No data found 在运行PL/SQL块.存储过程.函数.触发器等,假设须要进行操作的记录没有查询到.则会返回1403的错误 Goldengate中的1403 ...

  3. webpack构建具备版本管理能力的项目

    webpack是时下十分流行的编译和打包工具,它提供一种可扩展的loader的方式,简单的配置,便可以编译打包各类型的文件,包括js.css.image.font.html,以及各种预编译语言都不在话 ...

  4. python 笔记1--基础类型

    list 操作 append() 添加最外面 insert(pos,content) 插入指定地方 pop() 删除最外面 pop(pos) 删除指定地方 list中可以有list,且能用二维数组的方 ...

  5. sql server数据库主键自增一插入特定值

    ID identity(1,1) SET IDENTITY_INSERT TableName ON INSERT TableName(ID) VALUES(110) SET IDENTITY_INSE ...

  6. SQL-LINQ-Lambda 语法对照

    SQL LINQ Lambda  SELECT *FROM Employees from e in Employees  select e Employees .Select (e => e)  ...

  7. SQLServer服务器数据库之间的数据操作(完整版)

    分类: 数据库开发技术 ---------------------------------------------------------------------------------- -- Au ...

  8. Debian 使用杂记(一)

    前几天又冲动的把系统换成Linux了,最开始接触Linux是2010年,那时候买了个本本,预装的是ubuntu8.10,自此知道除了windows原来还有其它操作系统. 不记得什么时候开始知道ubun ...

  9. Java枚举类enum

    枚举类enum是JDK1.5引入的,之前都是用public static final int enum_value来代替枚举类的.枚举类enum是一种特殊的类,它默认继承了类java.lang.Enu ...

  10. Spring配置扫描mybatis的mapper文件注意:

    一般会将不业务的mapper文件放到不同的包中: spring配置扫描就需要配置下面的方式(两个*): <!-- mybatis文件配置,扫描所有mapper文件 --> <bean ...