HDU 1069 Monkey and Banana

來源:互聯網
上載者:User

標籤:style   os   io   for   代碼   c++   amp   size   

題意:給你一個數n,接下來給你一個矩形體的3邊長(即隨便你怎麼放它,它的高度有可能是3邊中的一條邊),現在要你求出這n個矩形體能堆成一座塔的最高高度(塔就是面積從店面開始向上嚴格遞增)

思路:動規裡的最長子序列的變形,結合了貪心的思想。首先我們需要對你所用的高進行排序,排序之後找出最嚴格遞減的面積就可以了

AC代碼:

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;struct node{    int l,w,h;}box[111];int dp[111];bool cmp(node a,node b){   if(a.l>b.l) return true;   if(a.l==b.l&&a.w>b.w) return true;   return false;}int main(){    int d[3],n,i,j,c=1,k,sumh;while(scanf("%d",&n)!=EOF&&n){    k=0;for(i=0;i<n;i++)    {    scanf("%d%d%d",&d[0],&d[1],&d[2]);sort(d,d+3);box[k].l=d[2];box[k].w=d[1];box[k].h=d[0];k++;  //每個矩形體有3中放的方式box[k].l=d[2];box[k].w=d[0];box[k].h=d[1];k++;box[k].l=d[1];box[k].w=d[0];box[k].h=d[2];k++;}sort(box,box+k,cmp);/*for(i=0;i<k;i++)            printf("%d %d %d\n",box[i].l,box[i].w,box[i].h);*/for(i=0;i<k;i++) dp[i]=box[i].h;for(i=k-2;i>=0;i--)for(j=i+1;j<k;j++){   if(box[i].l>box[j].l&&box[i].w>box[j].w) //尋求嚴格遞減的面積   if(dp[i]<dp[j]+box[i].h)   dp[i]=dp[j]+box[i].h;}        sumh=dp[0];        for(i=0;i<k;i++)            if(sumh<dp[i]) sumh=dp[i];        printf("Case %d: maximum height = %d\n",c++,sumh);}   return 0;}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.