POJ 2392

来源:互联网 发布:nba林书豪成名战数据 编辑:程序博客网 时间:2024/06/05 06:48
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int judge[40005];//judge[j]用于判断可不可以到达j高度;int use[40005];//use[j]表示当累积到达高度j时用了多少标号为i的石头int n;struct input{    int h,a,c;}stone[405];bool cmp(input x,input y){    return x.a<y.a;}int main(){    int ans;    while(scanf("%d",&n)!=EOF)    {        memset(judge,0,sizeof(judge));        judge[0]=1;        for(int i=0;i<n;i++)        {            scanf("%d%d%d",&stone[i].h,&stone[i].a,&stone[i].c);        }        sort(stone,stone+n,cmp);//高度上限从小到大排序;        ans=0;        for(int i=0;i<n;i++)        {            memset(use,0,sizeof(use));            for(int j=stone[i].h;j<=stone[i].a;j++)            {                if(judge[j]==0&&j>=stone[i].h&&judge[j-stone[i].h]==1&&use[j-stone[i].h]<stone[i].c)//这个判断可以到达高度j的语句;                {                    judge[j]=1;                    ans=max(ans,j);                    use[j]=use[j-stone[i].h]+1;                }            }        }        printf("%d\n",ans);    }    return 0;}

0 0
原创粉丝点击