hdu(1069)——Monkey and Banana(LIS变形)

来源:互联网 发布:java电商项目简历 编辑:程序博客网 时间:2024/05/29 14:34

题意:

现在给你n个石块,然后它由坐标来表示(x,y,z)。但是它可以有不同的方法,也就是说它的三个坐标可以轮换着来的。

石块的数量不限,但是每次都必须保持上底面的长和宽严格递减,然后问你用这些石块所能拼成的最大高度是多少。

思路:

因为坐标有多种情况,所以我们可以把每次的情况都存下去。

这里需要注意的是,在保存的时候,我们要保持x的坐标是大于y的,这样方便我们之后的排序。

然后就直接求最长递减子序列就好了。

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<set>#include<map>#include<math.h>using namespace std;#define maxn 111#define inf 99999999int dp[maxn];struct node{int x,y,z,s;}a[maxn];bool cmp(node a,node b){if(a.x!=b.x) return a.x>b.x;else if(a.x==b.x) return a.y>b.y;}int main(){int n;int j=1;while(~scanf("%d",&n)){if(n==0) break;int t=0;for(int i=0;i<n;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);a[t].x=x>y?x:y; a[t].y=x>y?y:x;a[t].z=z; t++;a[t].x=y>z?y:z; a[t].y=y>z?z:y; a[t].z=x; t++;a[t].x=x>z?x:z; a[t].y=x>z?z:x; a[t].z=y;t++;}sort(a,a+t,cmp);memset(dp,0,sizeof(dp));dp[0]=a[0].z;int ans=-1;for(int i=0;i<t;i++){int res=0;for(int j=0;j<i;j++){if((a[i].x<a[j].x&&a[i].y<a[j].y)||(a[i].x<a[j].y&&a[i].y<a[j].x)){res=max(res,dp[j]);}}dp[i]=res+a[i].z;ans=max(ans,dp[i]);}printf("Case %d: maximum height = %d\n",j++,ans);}}

虽然题目简单,但是这道题也是由我自己想出来的呢,由易到难的练下去吧!

我相信我自己的努力,在不久的以后一定能尝到AC难题的喜悦!

@所有学习dp的人,加油!!!

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 钻石外汇跑路怎么办 华为p9音质不好怎么办 蝰蛇音效不处理怎么办 停机错过的短信怎么办 手机卡丢了信息怎么办 手机qq消息延迟怎么办 手机无法注册qq怎么办 邮箱发ppt打不开怎么办 263邮箱网页打不开怎么办 电脑网页打不开邮箱怎么办 OPPO邮件卸载了怎么办 刘海扎起来了怎么办 车子过户行驶证怎么办 车辆过户登记证怎么办 当泥石流时应该怎么办 无法接通激活服务器怎么办 金蝶提示服务器怎么办 怎么办word发到qq邮箱 iphone邮箱账户错误怎么办 mac邮箱账户错误怎么办 速腾邮箱打不开怎么办 附近功能已屏蔽怎么办 网易支付被冻结怎么办 华为账号服务器繁忙怎么办? 电脑服务器删了怎么办 感觉自己没排卵怎么办 淘宝卖家骂人怎么办 淘宝遇到恶意买家怎么办 起诉不知道地址怎么办 不知道被告地址怎么办 被报复收到冥币怎么办 划伤伤口肿了怎么办 小孩跳舞不肯跳怎么办 买的豆沙馅太干怎么办 买的豆沙馅太甜怎么办 卷筒发型不会做怎么办 变频器stop灯亮怎么办 增压泵频繁启停怎么办 大理石地面没铺平怎么办 瓷砖拼花压平机跳匝怎么办 五笔不会拆字怎么办