hdu 1069 (dp)

来源:互联网 发布:h5牛牛源码下载 编辑:程序博客网 时间:2024/05/16 18:32
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
    int l,w,h;
} s[111];
int dp[111];
int cmp(node a,node b)
{
    if(a.l>b.l) return 1;
    if(a.l==b.l&&a.w>b.w)  return 1;
    else return 0;
}


int main()
{
    int n, flag=0;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
            break;
        int a[3], k=0;
        for(int i=0; i<n; i++)
        {
            scanf("%d%d%d",&a[0],&a[1],&a[2]);
            sort (a,a+3);//(保证长一定大于宽,其次使高有三种情况)
            s[k].l = a[2];
            s[k].w = a[1];
            s[k].h = a[0];
            k++;


            s[k].l = a[2];
            s[k].w = a[0];
            s[k].h = a[1];
            k++;


            s[k].l = a[1];
            s[k].w = a[0];
            s[k].h = a[2];
            k++;
        }
        sort(s,s+k,cmp);//(将所有的砖块进行排序)
        for(int i=0; i<k; i++)
            dp[i] = s[i].h;
        for(int i=k-2; i>=0; i--)//下面一层
            for(int j=i+1; j<k; j++)//上面一层
            {
                if(s[i].l>s[j].l && s[i].w>s[j].w)//(每块砖保证下面一块的长宽均大于下面一块)
                    if(dp[i] < dp[j]+s[i].h)//(考虑高的的变化)
                        dp[i] = dp[j]+s[i].h;
            }
        int sum = dp[0];
        for(int i=0; i<k; i++)//找最高的数
        {
            if(sum<dp[i])
                sum=dp[i];
        }
        printf("Case %d: maximum height = %d\n",++flag,sum);
    }
}
0 0
原创粉丝点击