• HDOJ 1069 DP


    开启DP之路

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1069
     描述一下:

    就是给定N(N<=20)个方体,让你放置,求放置的最高高度,限制条件是:上面的物体的长度和宽度都小于下面物体。

      觉得这道题目很经典:

    于是贴下

    。我们可以把一个方体看成六个,想到这里,然后求最高,方程很简单了 ,

      

     if (a[j].x>a[i].x&&a[j].y>a[i].y)
                ans=max(ans,a[j].h+a[i].h);
                a[i].h=ans;#include<stdio.h>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    struct node
    {
        int x,y,h;
    }a[1000];
    int cmp(node x,node y)
    {
        if (x.x==y.x) return x.y>y.y;
        return x.x>y.x;
    }
    int main()
    {
        int n;
        int t=0;
        while (scanf("%d",&n)!=EOF)
        {
            t++;
            if (n==0break;
            int xx,yy,zz,nn=0;
            for (int i=1;i<=n;i++)
            {
                scanf("%d%d%d",&xx,&yy,&zz);
                a[++nn].x=xx;a[nn].y=yy;a[nn].h=zz;
                a[++nn].x=xx;a[nn].y=zz;a[nn].h=yy;
                a[++nn].x=yy;a[nn].y=xx;a[nn].h=zz;
                a[++nn].x=yy;a[nn].y=zz;a[nn].h=xx;
                a[++nn].x=zz;a[nn].y=yy;a[nn].h=xx;
                a[++nn].x=zz;a[nn].y=xx;a[nn].h=yy;
            }
            sort(a+1,a+nn+1,cmp);
            a[0].h=0;
            a[0].x=a[0].y=99999999;

            for (int i=1;i<=nn;i++)
            {
                int ans=0;
                for (int j=0;j<i;j++)
                if (a[j].x>a[i].x&&a[j].y>a[i].y)
                ans=max(ans,a[j].h+a[i].h);
                a[i].h=ans;
            }
            int ans=0;
            for (int i=1;i<=nn;i++)
            ans=max(ans,a[i].h);
            printf("Case %d: maximum height = %d ",t,ans);
        }
        return 0;
    }

    求出A[1].H--A[N].H的最大ok了 

    随性Code
  • 相关阅读:
    某题2
    某题1
    某题
    DAY 7
    DAY 4
    数据结构(六)图
    【转载】大数据面试知识图谱
    数据结构(四)二叉树
    Scala(一)基础
    Java虚拟机(一)
  • 原文地址:https://www.cnblogs.com/forgot93/p/3496078.html
Copyright © 2020-2023  润新知