A - Space Elevator

Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

Submit Status

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

题意:有一群牛要上太空,他们计划建一个太空梯(用一些石头垒),他们有k种不同类型的石头,每一种石头的高度为h,数量为c,由于会受到太空辐射,每一种石头不能超过这种石头的最大建造高度a,求解利用这些石头所能修建的太空梯的最高的高度.
 多重背包问题,与一般的多重背包问题所不同的知识多了一个限制条件就是某些"物品"叠加起来的"高度"不能超过一个值,于是我们可以对他们的最高可能达到高度进行排序,然后就是一般的多重背包问题了 思路:
首先是录入数据,这一点比较简单,但是最好用scanf,因为它比cin快;
录入之后对各个数据按照最大的使用高度进行排序,就会转化成一个一般的多重背包为题,一开始我是用原始的多重背包做的麻烦并且也没有A了,最后看了一下题解,是因为每种块的使用个数的计算处理不当;
 #include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<memory.h>
using namespace std;
int a[];
struct node
{
int h;
int max;
int shu;
};
node num[];
int dp[];
bool cmp(node a,node b)
{
return a.max<b.max;
}
int main()
{
// freopen("1.txt","r",stdin);
int i,j,k;
int m;
memset(dp,,sizeof(dp));
dp[]=;
int sum[];
cin>>k;
for(i=;i<k;i++)
{
scanf("%d%d%d",&num[i].h,&num[i].max,&num[i].shu);
}
sort(num,num+k,cmp);
m=num[k-].max;
int ans=;
for(i=;i<k;i++)
{
memset(sum,,sizeof(sum));
for(j=num[i].h;j<=num[i].max;j++)
{
if(!dp[j]&&dp[j-num[i].h]&&sum[j-num[i].h]<num[i].shu)
{
dp[j]=;
sum[j]=sum[j-num[i].h]+;//提柜条件,表示到达j高度已经用的砖的个数
if(ans<j)
ans=j;
}
}
}
cout<<ans<<endl;
return ;
}

最新文章

  1. 汇编指令CLI/STI
  2. Android中的异步网络请求
  3. IIS短文件名泄露漏洞危害及防范方法
  4. javascript设计模式学习之十六——状态模式
  5. STM
  6. 【python cookbook】【字符串与文本】9.将Unicode文本统一表示为规范形式
  7. Android 获取屏幕尺寸与密度
  8. Unity3D游戏开发——Asset Server搭建
  9. Linux企业级项目实践之网络爬虫(30)——通过查阅RFC文档扩充更加复杂的功能
  10. Linux系统手动安装rpm包依赖关系分析(以Kernel升级为例)
  11. 意外发现的大批量导入数据SqlBulkCopy类
  12. 北漂的IT人
  13. apigw鉴权分析(1-4)新浪微博开放平台 - 鉴权分析
  14. 浅谈前端中的mvvm与mvc
  15. ansible roles
  16. 配置vscode同步大神玺哥的配置
  17. Python模块之sys模块
  18. STM新建项目
  19. personalblog
  20. Python 基础语法+简单地爬取百度贴吧内容

热门文章

  1. Memcache(1)
  2. Zeppelin使用Spark的yarn-client模式
  3. java 时间
  4. select空间提交form表单传递参数
  5. wefwewewe
  6. 用juery的ajax方法调用aspx.cs页面中的webmethod方法示例
  7. echarts 折柱混合图 (绑数据后)
  8. Crazy-Links
  9. UML类图几种关系总结
  10. 解决WordPress邮件无法发送问题