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

poj 动态规划DP - 2392 Space Elevator

时间:2015-05-08 10:59:02      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:poj   动态规划   

背包九讲里面的多重背包问题。每一块积木有高度和数量,也有最大能到的高度位置限制。我们DP前首先要对高度限制进行排序,因为从直观角度说,我们也需要先处理较小的能到高度的积木,这样才能取到最大值。例如第一个高度是11,限制高度是100,第二个的限制高度是10,那如果直接处理,第二个不会被处理到。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define max(x,y)(x>y?x:y)
struct block
{
	int h;
	int a;
	int c;
};
struct block data[410];
int  dp[40010]={0};
int cmp(const void*p1,const void*p2)
{
return (*( block*)p1).a > (*( block*)p2).a?1:-1;
}
int main(){
	int k,i,j,m;
	scanf("%d",&k);
	for(i=0;i<k;i++){
		scanf("%d %d %d",&data[i].h,&data[i].a,&data[i].c);
	}
	qsort(data,k,sizeof(data[0]),cmp);
	memset(dp,0,sizeof(dp));
	for(i=0;i<k;i++){
		for(m=1;m<=data[i].c;m++)
			for(j=data[i].a;j>=data[i].h;j--)
				dp[j]=max(dp[j],dp[j-data[i].h]+data[i].h);
	}
	int ans=0;
	for(i=0;i<=data[k-1].a;i++) ans=max(ans,dp[i]);
	printf("%d\n",ans);
	return 0;
}



poj 动态规划DP - 2392 Space Elevator

标签:poj   动态规划   

原文地址:http://blog.csdn.net/u010006643/article/details/45575985

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