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.

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.

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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

最新文章

  1. DRY(Don&#39;t Repeat Yourself )原则
  2. synchronized的实现原理和应用
  3. The The Garbage-First (G1) collector since Oracle JDK 7 update 4 and later releases
  4. PL/SQLDeveloper导入导出Oracle数据库方法
  5. linux系统安装jdk
  6. python 的dict的update 方法的一点诡秘的行为
  7. form表单action提交表单,页面不跳转且表单数据含文件的处理方法
  8. mybatis中#{}和${}的区别
  9. 简易解说拉格朗日对偶(Lagrange duality)(转载)
  10. [POJ2002]Squares(计算几何,二分)
  11. shadow fight 1.6.0 内购
  12. API认证方法一览
  13. C#设计模式总结(转)
  14. Django编写RESTful API(六):ViewSets和Routers
  15. main方法和args参数
  16. Java---SSH(MVC)面试题
  17. 一丶HTML介绍
  18. SNMP学习——v3 VACM
  19. 解决“Comparison method violates its general contract!”
  20. 洛谷P4396 作业 [AHOI2013] 莫队

热门文章

  1. flex布局(非常重要)
  2. 【转】android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler
  3. QT5静态编译工程(arm交叉编译)
  4. Number()、parseInt()、parseFloat()、~~、~
  5. 电脑中安装了两个版本的jdk,后装的会把第一个覆盖掉
  6. Oracle常用命令复习(备考资料)
  7. Kali aircrack-ng wifi密码破解(暴力)
  8. PyCharm底部控制台console界面开启/取消自动换行
  9. JS - 数组转字符串
  10. 079、Java数组之数组的静态初始化