题目链接

题意:摞长方体,给定长方体的长宽高,个数无限制,可随意翻转,要求下面的长方体的长和宽都大于上面的,都不能相等,问最多能摞多高。

题解:个数无限,其实每种形态最多就用一次,把每种形态都单独算一种,同时保证长比宽大,按dp做即可。注意要从小到大摞,从大到小是不对的。

#include <bits/stdc++.h>
using namespace std;
struct sa
{
int l,w,h;
}data[];
int dp[],n,d[];
bool cmp(sa x,sa y)
{
if(x.l==y.l) return x.w<y.w;
return x.l<y.l;
}
int main()
{
int t=;
while(scanf("%d",&n)&&n)
{
int cnt=;
for(int i=;i<n;i++)
{
scanf("%d%d%d",&d[],&d[],&d[]);
sort(d,d+);
data[cnt].l=d[],data[cnt].w=d[],data[cnt].h=d[],cnt++;
data[cnt].l=d[],data[cnt].w=d[],data[cnt].h=d[],cnt++;
data[cnt].l=d[],data[cnt].w=d[],data[cnt].h=d[],cnt++;
}
sort(data,data+cnt,cmp);
for(int i=;i<cnt;i++)
dp[i]=data[i].h;
for(int i=;i<cnt;i++)
for(int j=;j<i;j++)
{
if(data[j].l<data[i].l&&data[j].w<data[i].w)
{
if(dp[i]<dp[j]+data[i].h)//双层for更直观
dp[i]=dp[j]+data[i].h;
}
}
int ans=dp[];
for(int i=;i<cnt;i++)
ans=max(ans,dp[i]);
printf("Case %d: maximum height = %d\n",t++,ans);
}
return ;
}

传送门:http://blog.csdn.net/qinmusiyan/article/details/7986263

最新文章

  1. IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)
  2. Matlab 的reshape函数
  3. SharePoint\O365 &quot;See also&quot;功能 and site feature 激活\禁用小节
  4. DIV相关的操作总结
  5. QA技能必备
  6. iOS -动态可变参数
  7. Lua 第一个应用程序 Hello World
  8. UIImageView之我的动画为什么停了?UIImageView, highLighted,animationImages
  9. Asp.net 回车默认按钮
  10. 聊聊synchronized的锁问题
  11. + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException
  12. 团队的Kick off
  13. double 四舍五入保留一定的位数
  14. kettle并行运行时出现「Unknown error in KarafBlueprintWatcher」
  15. spring cloud Ribbon
  16. canvas简单下雨特效
  17. 我的DIY作品
  18. hostapd作为radius服务器
  19. 磁盘IO过高时的处理办法
  20. angularJS新增 品优购新增品牌

热门文章

  1. kafka重新启动时出现:found a corrupted index file due to requirement failed问题解决方法
  2. Java的Bean
  3. JVM学习笔记(一):Java内存区域
  4. 对CAS机制的理解(二)
  5. centos 7下ldap安装
  6. VS开发环境美化
  7. 【BZOJ2813】奇妙的Fibonacci
  8. Metasploit+python生成免杀exe过360杀毒
  9. Android 65535 问题与 MultiDex分包
  10. loj6436【PKUSC2018】神仙的游戏