POJ 2392 Space Elevator [DP 多重背包]

原创 2012年03月22日 10:32:14

题意:

给定n种砖块,每种砖块有c个,高度是w,在h高度下可以使用。

问怎样累加可以使总高度最高。

思路:

如果没有h高度约束的话显然是直接全部相加即可。

用dp解决,每个高度值 j 是一种状态。所以其实本质是背包问题。

因为每种砖块是有限个,所以是多重背包。用二进制优化时间。

但是因为h高度约束的问题,每个状态 j 只可能由 高度约束 h >=j 的砖块 有关。

所以要先由h高度进行从小到大排序再dp。


#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<cmath>
#include<algorithm>
#define llong long long
#define Min(a,b) (a<b?a:b)
#define Max(a,b) (a>b?a:b)
#define Abs(a) ((a)>0?(a):-(a))
#define Mod(a,b) (((a)-1+(b))%(b)+1)
using namespace std;
int n,m;
const int N=7005;
const int M=40005;
const int inf=99999999;
int dp[M];
struct Node
{
	int w,h;  
}node[N];
bool cmp(const Node &a,const Node &b)
{
	return a.h<b.h;
}
void solve()
{
	memset(dp,0,sizeof(dp));
	for(int i=1;i<=n;i++)
	{
		for(int j=node[i].h;j>=node[i].w;j--)
		{
			dp[j]=Max(dp[j],dp[j-node[i].w]+node[i].w);
		}
	}
	int ans=0;
	for(int i=1;i<=node[n].h;i++)
		ans=Max(ans,dp[i]);
	printf("%d\n",ans);
}
int main()
{
	int tmp,a,b,c;
	n=0;
	scanf("%d",&tmp);
	for(int i=1;i<=tmp;i++)
	{
		scanf("%d%d%d",&a,&b,&c);
		for(int j=1;c;j*=2)
		{
			n++;
			node[n].h=b;
			if(j<=c)
			{
				node[n].w=a*j;
				c-=j;
			}
			else
			{
				node[n].w=a*c;
				c=0;
			}
		}
	}
	sort(node+1,node+1+n,cmp);
	solve();
	return 0;
}


poj——2392——Space Elevator(多重)

Description The cows are going to space! They plan to achieve orbit by building a sort of space el...
  • u011470356
  • u011470356
  • 2014年02月15日 19:10
  • 416

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

Space Elevator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9042   ...
  • yu_ch_sh
  • yu_ch_sh
  • 2015年04月05日 21:05
  • 333

Space Elevator(多重背包)

Problem Description The cows are going to space! They plan to achieve orbit by building a sort of...
  • a997930294
  • a997930294
  • 2014年08月01日 16:20
  • 566

poj 2392 Space Elevator(未优化的多重背包)

http://poj.org/problem?id=2392 题意:有K种石头,每种石头的高度为h,数量为num,它放置的高度不能超过a。问这些石头最高能达到的高度。 思路:纯多重背包。将...
  • u013081425
  • u013081425
  • 2014年02月20日 16:15
  • 570

POJ 2392 Space Elevator (多重背包 + 思路题)

题目链接:http://poj.org/problem?id=2392 Space Elevator Time Limit: 1000MS   Memory Limit...
  • u010276926
  • u010276926
  • 2014年04月01日 22:55
  • 514

poj 2392 Space Elevator 排序(贪心)+多重背包 仍然很水 ★★

Space Elevator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9955   Accepted: 4...
  • yskyskyer123
  • yskyskyer123
  • 2015年12月12日 00:20
  • 304

poj2392 多重背包问题

http://poj.org/problem?id=2392 Description The cows are going to space! They plan to achieve o...
  • u013573047
  • u013573047
  • 2014年11月16日 20:19
  • 1008

poj1742 多重背包的可行性问题

http://poj.org/problem?id=1742 Description People in Silverland use coins.They have coins of v...
  • u013573047
  • u013573047
  • 2015年03月18日 21:17
  • 1268

POJ - 2392 多重背包

题意:有K种块,每种高度为Hi,数量为Ci,拿这K种块去建塔,每种块再塔中所处的高度不能超过Ai,问塔最高能有多高; 思路:首先因为每种块所出的高度不能超过Ai,那么这个塔的最大高度不会超过max(...
  • qq_36542637
  • qq_36542637
  • 2017年08月09日 16:36
  • 67

POJ 2392(多重背包)

Space Elevator Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I...
  • mowenwen_
  • mowenwen_
  • 2015年09月06日 22:03
  • 185
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2392 Space Elevator [DP 多重背包]
举报原因:
原因补充:

(最多只允许输入30个字)