码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 题目2392 Space Elevator(多重背包)

时间:2015-04-06 08:57:23      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

Space Elevator
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 9042   Accepted: 4296

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

Hint

OUTPUT DETAILS: 

From the bottom: 3 blocks of type 2, below 3 of type 1, below 6 of type 3. Stacking 4 blocks of type 2 and 3 of type 1 is not legal, since the top of the last type 1 block would exceed height 40.

Source

USACO 2005 March Gold

ac代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define INF 1<<30
#define max(a,b) (a>b?a:b)
#define min(a,b) (a>b?a:b)
struct s
{
	int h,num,mh;
}b[440];
int dp[40040];
int cmp(const void *a,const void *b)
{
	return (*(struct s *)a).mh-(*(struct s *)b).mh;
}
int n;
int main()
{
	while(scanf("%d",&n)!=EOF)
	{
		int i,j,k;
		for(i=0;i<n;i++)
		{
			scanf("%d%d%d",&b[i].h,&b[i].mh,&b[i].num);
		}
		qsort(b,n,sizeof(b[0]),cmp);
		memset(dp,0,sizeof(dp));
		for(i=0;i<n;i++)
		{
			for(k=1;k<=b[i].num;k++)
			{
				for(j=b[i].mh;j>=b[i].h;j--)
				{
					dp[j]=max(dp[j],dp[j-b[i].h]+b[i].h);
				}
			}
		}
		int ans=0;
		for(i=0;i<=b[n-1].mh;i++)
		{
			ans=max(ans,dp[i]);
		}
		printf("%d\n",ans);
	}
}


POJ 题目2392 Space Elevator(多重背包)

标签:

原文地址:http://blog.csdn.net/yu_ch_sh/article/details/44891177

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!