您的位置:首页 > 其它

tyvj 1086 Elevator

2011-01-17 14:39 281 查看
From Vivian Snow
Elevator
背景 Background
广东汕头聿怀初中 Train#2 Problem4
描述 Description
现有N种箱子,每种箱子高度H_i,数量C_i。现选取若干箱子堆成一列,且第i种箱子不能放在高度超过A_i的地方。试求最大叠放高度。
输入格式 Input Format
第一行,一个整数,表示箱子种类N。
接下来N行,每行三个整数,表示H_i,A_i,C_i。
输出格式 Output Format
一个整数,表示最大高度。
样例输入 Sample Input [复制数据]
3
7 40 3
5 23 8
2 52 6
样例输出 Sample Output [复制数据]
48
时间限制 Time Limitation
1s.
注释 Hint
N <= 400 , H_i <= 100 , C_i <= 10 , A_i <= 40000
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node
{
int a,h,c;
};
Node data[500];
bool f[50000];
bool cmp(Node x,Node y)
{
return x.a<y.a;
}
int main()
{
int n;
while(scanf("%d",&n)==1)
{
memset(f,0,sizeof(f));f[0]=1;
for(int i=0;i<n;i++) scanf("%d%d%d",&data[i].h,&data[i].a,&data[i].c);
sort(data,data+n,cmp);//按照最大高度排序
for(int i=0;i<=n;i++)
{
for(int j=1;j<=data[i].c;j++)
{
for(int k=data[i].a;k>=data[i].h;k--)//每个箱子的高度范围是h[i]~A[i]
{
if(f[k-data[i].h]) f[k]=1;
}
}
}
int cnt=-1;
for(int i=50000-1;i>=0;i--)
{
if(f[i])
{
cnt=i;
break;
}
}
printf("%d/n",cnt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: