您的位置:首页 > 其它

POJ 2392 Space Elevator

2015-08-29 10:08 417 查看
POJ 2392 Space Elevator

奶牛们想用c_i个高h_i的积木造通天塔,每种积木不能高过a_i,求塔的最大高度

必须按积木的a_i从小到大的顺序递推才能覆盖全部解空间。多重背包问题

include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int h,maxn,n;
};
node a[516];
int dp[516][40016];
bool is_greater(const node& a,const node& b)
{
return a.maxn<b.maxn;
}
int main()
{
int T;
int i,j,k;
cin>>T;
for(i=0;i<T;i++)
{
cin>>a[i].h>>a[i].maxn>>a[i].n;
}
sort(a,a+T,is_greater);
//多重背包
for(i=0;i<T;i++)
{
for(j=0;j<=a[i].maxn;j++)
{
for(k=0;k*a[i].h<=j && k<=a[i].n ;k++)
{
dp[i+1][j]=max(dp[i+1][j],dp[i][j-k*a[i].h]+k*a[i].h);
}
}
}
int result=-1;
for(i=1;i<=a[T-1].maxn;i++)
{
result=max(result,dp[T][i]);
}
cout<<result<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: