POJ2392:Space Elevator
2024-09-02 13:54:37
Space Elevator
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 9244 | Accepted: 4388 |
Description
The cows are going to space! They plan to achieve orbit by building a sort of space elevator: a giant tower of blocks. They have K (1 <= K <= 400) different types of blocks with which to build the tower. Each block of type i has height h_i (1 <= h_i <= 100)
and is available in quantity c_i (1 <= c_i <= 10). Due to possible damage caused by cosmic rays, no part of a block of type i can exceed a maximum altitude a_i (1 <= a_i <= 40000).
Help the cows build the tallest space elevator possible by stacking blocks on top of each other according to the rules.
and is available in quantity c_i (1 <= c_i <= 10). Due to possible damage caused by cosmic rays, no part of a block of type i can exceed a maximum altitude a_i (1 <= a_i <= 40000).
Help the cows build the tallest space elevator possible by stacking blocks on top of each other according to the rules.
Input
* Line 1: A single integer, K
* Lines 2..K+1: Each line contains three space-separated integers: h_i, a_i, and c_i. Line i+1 describes block type i.
* Lines 2..K+1: Each line contains three space-separated integers: h_i, a_i, and c_i. Line i+1 describes block type i.
Output
* Line 1: A single integer H, the maximum height of a tower that can be built
Sample Input
3
7 40 3
5 23 8
2 52 6
Sample Output
48
题意是要搭梯子,要求的是梯子的最高能达到多少。限制条件一个是每个梯子有自身的限制高度,另外一个是梯子数量。
和POJ1014很像的思路,判断多高是判断每一个可能的高度其DP[]值是否为true,如果为true,记录其最大值即可。
我那种代码最后的内存会很大,没必要在sum上申请二维数组,一维的就足够了,每一次清零就好。
代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; int dp[40002];
int sum[40002][410];//数组一开始开小了
struct Node{
int h;
int cant;
int num;
}node[500]; bool cmp(Node no1,Node no2)
{
return no1.cant < no2.cant;
} int main()
{
int count;
int i; cin>>count;
for(i=1;i<=count;i++)
{
cin>>node[i].h>>node[i].cant>>node[i].num;
}
sort(node+1,node+1+count,cmp); memset(sum,0,sizeof(sum));
memset(dp,0,sizeof(dp));
dp[0]=1;
int j,ans=0;
for(i=1;i<=count;i++)
{
for(j=node[i].h;j<=node[i].cant;j++)
{
if(!dp[j]&&dp[j-node[i].h]&&sum[j-node[i].h][i]<node[i].num)
{
sum[j][i] = sum[j-node[i].h][i]+1;
dp[j]=1;
if(j>ans)
ans=j;
}
}
}
cout<<ans<<endl; return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
最新文章
- DRY(Don&#39;t Repeat Yourself )原则
- synchronized的实现原理和应用
- The The Garbage-First (G1) collector since Oracle JDK 7 update 4 and later releases
- PL/SQLDeveloper导入导出Oracle数据库方法
- linux系统安装jdk
- python 的dict的update 方法的一点诡秘的行为
- form表单action提交表单,页面不跳转且表单数据含文件的处理方法
- mybatis中#{}和${}的区别
- 简易解说拉格朗日对偶(Lagrange duality)(转载)
- [POJ2002]Squares(计算几何,二分)
- shadow fight 1.6.0 内购
- API认证方法一览
- C#设计模式总结(转)
- Django编写RESTful API(六):ViewSets和Routers
- main方法和args参数
- Java---SSH(MVC)面试题
- 一丶HTML介绍
- SNMP学习——v3 VACM
- 解决“Comparison method violates its general contract!”
- 洛谷P4396 作业 [AHOI2013] 莫队
热门文章
- flex布局(非常重要)
- 【转】android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler
- QT5静态编译工程(arm交叉编译)
- Number()、parseInt()、parseFloat()、~~、~
- 电脑中安装了两个版本的jdk,后装的会把第一个覆盖掉
- Oracle常用命令复习(备考资料)
- Kali aircrack-ng wifi密码破解(暴力)
- PyCharm底部控制台console界面开启/取消自动换行
- JS - 数组转字符串
- 079、Java数组之数组的静态初始化