DP:Space Elevator(POJ 2392)
2015-11-05 01:31
489 查看
太空电梯
题目大意:一群牛想造电梯到太空,电梯都是由一个一个块组成的,每一种块不能超过这个类型的高度,且每一种块都有各自的高度,有固定数量,问最高能造多高。
这题就是1742的翻版,对ai排个序就可以了
(尼玛,我qsort排了n-1个数,wa半天不知所措)
#include <iostream> #include <functional> #include <algorithm> using namespace std; typedef struct _set { int h_i; int max_h; int count; }Block; int fcomp(const void *a, const void *b) { return (*(Block *)a).max_h - (*(Block *)b).max_h; } static int dp[40005]; static Block B_Set[404]; void Search(const int); int main(void) { int n; while (~scanf("%d", &n)) { if (n == 0) continue; for (int i = 1; i <= n; i++) scanf("%d%d%d", &B_Set[i].h_i, &B_Set[i].max_h, &B_Set[i].count); qsort(B_Set, n + 1, sizeof(Block), fcomp); Search(n); } return 0; } void Search(const int n) { int i, j; memset(dp, -1, sizeof(dp)); dp[0] = 0; for (i = 1; i <= n; i++) { if (B_Set[i].h_i == 0) continue; for (j = 0; j < B_Set[i].h_i && j <= B_Set[i].max_h; j++)//先把前面的几个包确定下来 if (dp[j] != -1) dp[j] = B_Set[i].count; for (; j <= B_Set[i].max_h; j++) { if (dp[j] == -1) { if (dp[j - B_Set[i].h_i] <= 0) continue; else dp[j] = dp[j - B_Set[i].h_i] - 1; } else dp[j] = B_Set[i].count; } } for (int i = B_Set .max_h; i >= 0; i--) { if (dp[i] >-1) { printf("%d\n", i); break; } } }
相关文章推荐
- LeetCode Integer to English Words
- composer 报错笔记
- 五分钟理解一致性哈希算法(consistent hashing)
- 虚拟机安装VBoxAdditions增强功能
- Unity的实时绘制与坐标转换总结
- 2013年华为c语言上机试题3
- 关于linux Centos 7一个网卡配置多个IP的方法
- [Lintcode] Insert Node in a Binary Search Tree
- scau_热身游戏(高精度)
- Session.load()和get()方法区别
- Django url 标签和reverse()函数的使用(转)
- OpenGL ES 3.0之顶点缓冲
- jquery easyui
- C++设计模式-Adapter适配器模式
- 回射客户端服务器中僵尸进程的处理( the solution of zombie process in the echo client && server )
- lazyload隐藏元素不生效处理方法
- 6回归分析
- (哈夫曼树思想 )poj 3253 Fence Repair
- c++中的强制转换static_cast、dynamic_cast、reinterpret_cast的不同用法儿
- Maven学习——安装与修改Maven的本地仓库路径