POJ 2392 Space Elevator 背包题解
多重背包。本题不须要二分优化。相对简单点。由于反复数十分小,小于10。
而添加一个限制每种材料的高度做法。假设使用逆向填表,那么仅仅须要从这个高度往小递归填表就能够了。
还有就是注意要排序,以限制高度为标准从小到大排序。否则答案错误的。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using std::sort; const int MAX_K = 401;
const int MAX_H = 40001;
struct HCA
{
int h, a, c;
bool operator<(const HCA &hac)
{
return a < hac.a;
}
};
HCA hca[MAX_K];
bool tbl[MAX_H]; inline int max(int a, int b) { return a > b ? a : b; } int bagDP(int B)
{
memset(tbl, 0, sizeof(tbl));
tbl[0] = true;
for (int i = 1; i <= B; i++)
{
int k = 1;
for ( ; (k << 1) <= hca[i].c; k <<= 1)
{
for (int j = hca[i].a; j >= hca[i].h*k; j--)
if (tbl[j-hca[i].h*k]) tbl[j] = true;
}
k = hca[i].c - k + 1;
for (int j = hca[i].a; j >= hca[i].h*k; j--)
if (tbl[j-hca[i].h*k]) tbl[j] = true;
}
int i = MAX_H - 1;
for (; i > 0 && !tbl[i]; i--);
return i;
} int main()
{
int blocks;
scanf("%d", &blocks);
for (int i = 1; i <= blocks; i++)
{
scanf("%d %d %d", &hca[i].h, &hca[i].a, &hca[i].c);
}
sort(hca, hca+blocks+1);
printf("%d\n", bagDP(blocks));
return 0;
}
POJ 2392 Space Elevator 背包题解的更多相关文章
- POJ 2392 Space Elevator(贪心+多重背包)
POJ 2392 Space Elevator(贪心+多重背包) http://poj.org/problem?id=2392 题意: 题意:给定n种积木.每种积木都有一个高度h[i],一个数量num ...
- poj 2392 Space Elevator(多重背包+先排序)
Description The cows are going to space! They plan to achieve orbit by building a sort of space elev ...
- 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 ...
- POJ 2392 Space Elevator(多重背包)
显然塔的总高度不会超过最大的a[i],而a[i]之前的可以到达的高度 是由a值更小的块组成,所以按照a从小到大的顺序去转移. 然后就是多重背包判断存在性了,几乎和coin那题一样. 数据没coin丧病 ...
- POJ 2392 Space Elevator 贪心+dp
题目链接: http://poj.org/problem?id=2392 题意: 给你k类方块,每类方块ci个,每类方块的高度为hi,现在要报所有的方块叠在一起,每类方块的任何一个部分都不能出现在ai ...
- POJ 2392 Space Elevator DP
该题与POJ 1742的思路基本一致:http://www.cnblogs.com/sevenun/p/5442279.html(多重背包) 题意:给你n个电梯,第i个电梯高h[i],数量有c[i]个 ...
- POJ 3211 Washing Clothes 背包题解
本题是背包问题,可是须要转化成背包的. 由于是两个人洗衣服,那么就是说一个人仅仅须要洗一半就能够了,由于不能两个人同一时候洗一件衣服,所以就成了01背包问题了. 思路: 1 计算洗完同一颜色的衣服须要 ...
- POJ 2392【多重背包】
题意: k个块,给出每个块的高度hi,数量ci,不能超过的高度: 求这些块可以组成的最大高度一个. 思路: 大致可看这个题是一个背包,背包的承重是高度. 对于每个物品,有他的价值是高度,还有限定的数量 ...
随机推荐
- rpm包安装
RPM全称是“RedHatPackageManager”是由RedHat公司发发展起来的,本质是将软件源码包经过编译并且打包成rpm的格式,rpm文件包含的有二进制文件,配置文件,库文件等,同时RPM ...
- 打开SQL Server 配置管理器时出现了问题
解决方法: 1.找到sqlmgmproviderxpsp2up.mof的文件位置 2.打开window+R打开命令提示符(输入cmd):输入sqlmgmproviderxpsp2up.mof的文件位置 ...
- 【回顾整理】暴走的SQL语句练习!!!
设计一个学生成绩数据库,该库包含学生,老师,课程和成绩等信息并完成后面的练习.学生:学号(SNO).姓名(SNAME).性别(SSEX).生日(SBIRTHDAY ).所属班级(SCLASS )课程: ...
- java 上传文件
public static boolean upload(File file, String savepath, String loginNo, String filename) { boolean ...
- SwfUpload及imgareaselect使用方法
1.导入文件 Swfupload相关文件 imgareaselect截取插件相关文件 2.前端html代码 添加一个截取图片的按钮,其他为swf所需的html. <body> <di ...
- 神经网络作业: NN LEARNING Coursera Machine Learning(Andrew Ng) WEEK 5
在WEEK 5中,作业要求完成通过神经网络(NN)实现多分类的逻辑回归(MULTI-CLASS LOGISTIC REGRESSION)的监督学习(SUOERVISED LEARNING)来识别阿拉伯 ...
- smarty练习: 设置试题及打印试卷
数据库表格:shiti, shititimu, timu, kemu, xuanxiang 根据科目设置一个可以添加试题的页面:(如下图) 具体的题目从数据库中查出并形成一张试卷的形式 考试试题设置: ...
- php 之 PDO数据访问抽象层(0513)
PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口. PDO与mysqli曾经被建议用来取代原本PHP在用的mysql相关函数, 基于数据库使用的安全性,因为后者欠缺对于S ...
- Ping命令详解
引言:我们每天都在使用Ping命令,但是我们可能不太清楚Ping的工作原理,对运行结果中的很多细节也不是很清楚.查找了一下资料,现在和大家分享一下Ping的运行原理和相关细节. A.Ping命令的工作 ...
- 文成小盆友python-num6 -反射 ,常用模块
本次主要内容: 内容补充 python中的反射 常用模块 一,内容补充: 利用上次说到的递归的方法来实现阶乘. 说明:利用函数递归的方法来实现阶乘如: 1*2*3*4*5*6*7 代码实现如下: de ...