题意:

N(不超过30)种木块,每种木块有长、宽、高x,y,z。

木块A可以搭在木块B上当且仅当A的底面长和宽都分别小于B的顶面的长与宽,即不能有超出B的部分。

问垒起来的“木块塔”的最大高度。

思路:

每种木块有6种形态,所以总共有6*N种木块,列张二维关系表,然后记忆搜。

代码:

struct node{
int x,y,z;
}
b[355]; int dp[355];
int c;
bool mp[355][355]; int dfs(int x){
if(dp[x]!=-1) return dp[x];
bool yes = false;
rep(i,1,c) if(mp[x][i]){
dp[x] = max( dp[x],dfs(i)+b[x].z );
yes = true;
}
if(yes==false){
dp[x]=b[x].z;
}
return dp[x];
} int main(){ int n;
int T=0;
while(scanf("%d",&n)!=EOF && n>0){
rep(i,1,n){
scanf("%d%d%d",&b[i].x,&b[i].y,&b[i].z);
}
c = n;
rep(i,1,n){
b[++c].x=b[i].y; b[c].y=b[i].x; b[c].z=b[i].z;
b[++c].x=b[i].x; b[c].y=b[i].z; b[c].z=b[i].y;
b[++c].x=b[i].z; b[c].y=b[i].y; b[c].z=b[i].x;
b[++c].x=b[i].z; b[c].y=b[i].x; b[c].z=b[i].y;
b[++c].x=b[i].y; b[c].y=b[i].z; b[c].z=b[i].x;
} mem(mp,false); //mp[i][j]==true:第i种可以放到第j种上 rep(i,1,c){
rep(j,1,c){
if(b[i].x<b[j].x && b[i].y<b[j].y){
mp[i][j]=true;
}
if(b[i].x>b[j].x && b[i].y>b[j].y){
mp[j][i]=true;
}
}
} mem(dp,-1);
int ans = -1; rep(i,1,c){
if(dp[i]==-1){
ans = max( ans,dfs(i) );
}else{
ans = max( ans,dp[i] );
}
} printf("Case %d: maximum height = %d\n",++T,ans);
} return 0;
}

hdu 1069 Monkey and Banana(记忆搜)的更多相关文章

  1. HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径)

    HDU 1069 Monkey and Banana / ZOJ 1093 Monkey and Banana (最长路径) Description A group of researchers ar ...

  2. HDU 1069 Monkey and Banana dp 题解

    HDU 1069 Monkey and Banana 纵有疾风起 题目大意 一堆科学家研究猩猩的智商,给他M种长方体,每种N个.然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉. 现在给你M种 ...

  3. HDU 1069 Monkey and Banana(转换成LIS,做法很值得学习)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS (Java ...

  4. HDU 1069 Monkey and Banana(二维偏序LIS的应用)

    ---恢复内容开始--- Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  5. HDU 1069 Monkey and Banana (DP)

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  6. HDU 1069—— Monkey and Banana——————【dp】

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  7. hdu 1069 Monkey and Banana

    Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  8. HDU 1069 Monkey and Banana(动态规划)

    Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...

  9. HDU 1069 Monkey and Banana(DP 长方体堆放问题)

    Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...

随机推荐

  1. Markdown公式用法大全

    目录 基本语法 两种代码引用方式 插入链接并描述 插入图片 有序列表 无序列表 分割线 表格 如何插入公式 如何输入上下标 如何输入括号和分隔符 如何输入分数 如何输入开方 如何输入省略号 如何输入矢 ...

  2. js 获取转换网址中文参数

    var search = decodeURI(location.search).substr(1); console.log(search); decodeURI 方法返回一个已编码的统一资源标识符 ...

  3. redis的持久化 与事务管理

    1. redis的持久化 Redis的持久化主要分为两部分:RDB(Redis DataBase), AOF(Append Only File) 2. 什么是redis 的持久化        在指定 ...

  4. 腾讯的表妹告诉我怎么学Python,今天就教我搭建Python环境和基本语法,我【码上开始】

    本文首发公众号:码上开始 环境准备 Pycharm Python3 window10/win7 安装 Python 打开Python官网地址 下载 executable installer,x86 表 ...

  5. Linux命令行:监视系统IO、内存、CPU、GPU

    [监视IO] Linux18.04自带工具sysstat,其中的iostat可以用于观察IO情况.Linux16.04系统没有默认安装,需要手动安装,安装sysstat时需要下载新的内核(我的原本是1 ...

  6. 小米路由器4a千兆版刷openwrt

    现在网上搜小米路由器4a千兆版刷机的都是刷的padavan的,很少能找到openwrt的刷机教程. 首先刷openwrt系统的时候要先刷入引导程序breed,网上有一篇帖子写的很详细(https:// ...

  7. 洛谷1501 Tree II(LCT,路径修改,路经询问)

    这个题是一个经典的维护路径信息的题,对于路径上的修改,我们只需要把对应的链\(split\)上来,然后修改最上面的点就好,注意pushdown的时候的顺序是先乘后加 然后下传乘法标记的时候,记得把对应 ...

  8. uoj167 元旦老人与汉诺塔(记忆化搜索)

    QwQ太懒了,题目直接复制uoj的了 QwQ这个题可以说是十分玄学的一道题了 首先可以暴搜,就是\(dfs\)然后模拟每个过程是哪个柱子向哪个柱子移动 不多解释了,不过实现起来还是有一点点难度的 直接 ...

  9. Python 3.10 正式发布,新增模式匹配,同事用了直呼真香!

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 前几天,也就是 10 月 4 日,Python 发布了 3.10.0 版本,什么?3.9 之后居 ...

  10. java实现责任链模式的小demo

    //一个请假请求 public class LeaveRequest { private int leaveDays; private String name; public void leave() ...