hdu 1069 Monkey and Banana(记忆搜)
2024-09-06 02:23:33
题意:
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;
}
最新文章
- 4.3.5 使用Http:// (Https://)协议连接到ActiveMQ 2015年9月28日
- 反射,System.Type类
- android volley http请求框架
- Autocomplete:属性介绍、firefox中文支持问题
- org.apache.ibatis.builder.IncompleteElementException: Could not find parameter map
- 应用OpenCV进行OCR字符识别
- ios7 UITableView底线右移
- IOS开发系列 --- 核心动画
- MySQL 存储过程例子,不能在if else里面用begin end否则会报错Error Code : 1064!
- JVM的参数详解(转)
- php编译错误:Cannot find OpenSSL&#39;s <;evp.h>;
- javascript(3)
- 从源码(编译)安装golang 二
- [题解]玩具谜题(toy)
- docker学习------记录centos7.5下docker安装更换国内源的处理过程
- python中的os.listdir()函数
- jquery终止函数
- IOS Https适配摸索
- ob系列函数中常用函数
- C# .NET 获取网络适配器信息和路径信息