Monkey and Banana

HDOJ-1069

  • 这里实际是嵌套矩形问题的变式,也就是求不固定起点的最长路径
  • 动态转移方程为:dp[i]=max(dp[j]+block[i].h|(i,j)∈map),这里的dp[i]表示从i块出发的可以构建的最大的高度。
  • 首先需要构建出图map,表示一块是否可以搭建在另一块上面。
  • 还有一个问题就是需要进行排序,我是按照面积进行从小到大排序的。如果不排序,可能AC不了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
int n;
int cnt;//实际所有的块数
struct node{
int x;
int y;
int h;
node(){};
node(int x1,int y1,int h1):x(x1),y(y1),h(h1){}
bool operator<(const node& t)const{
return x*y<t.x*t.y;
}
};
node block[90];
//vector<node> map[99];
int map[99][99];
int dp[99];//dp[i]表示从i出发可以达到的最高高度
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int k=0;
while(cin>>n&&n){
cnt=0;
int x,y,z;
for(int i=0;i<n;i++){ cin>>x>>y>>z;
block[cnt++]=node(x,y,z);
block[cnt++]=node(x,z,y);
block[cnt++]=node(y,z,x);
}
sort(block,block+cnt);//一定要排序
for(int i=0;i<cnt;i++){
for(int j=0;j<cnt;j++){
if((block[i].x>block[j].x&&block[i].y>block[j].y)||(block[i].x>block[j].y&&block[i].y>block[j].x)){
map[i][j]=1;
}else{
map[i][j]=0;
}
}
} for(int i=0;i<cnt;i++)
dp[i]=block[i].h;
int maxs=0;
for(int i=0;i<cnt;i++){
dp[i]=block[i].h;//这里一定要初始化为它相应的高度,因为从这一块开始出发,其实高度必须是它自己本身的高度
for(int j=0;j<i;j++){
if(map[i][j]){//j可以放在i上面
dp[i]=max(dp[i],dp[j]+block[i].h);
}
}
maxs=max(dp[i],maxs);
//cout<<dp[i]<<endl;
}
cout<<"Case "<<++k<<": maximum height = "<<maxs<<endl;
//cout<<maxs<<endl;
}
return 0;
}

最新文章

  1. java如何调用webservice接口
  2. quartz定时任务中常用的cron表达式
  3. javascript-代码复用模式
  4. Twisted 阐述
  5. Mysql Explain 详解
  6. HTTP 代理原理及实现
  7. using 关键字给类和名称空间指定别名
  8. Jquery Validate 动态添加校验
  9. ng-class 用法
  10. 强大而容易学的JavaScript初学者可以看看。
  11. 漫谈PHP组件、框架、Composer那些事
  12. springboot启动配置原理之一(创建SpringApplication对象)
  13. 快播王欣发布匿名IM社交软件“马桶MT”
  14. 一个简单的PHP短信群发
  15. day73
  16. 【Linux 进程】之关于父子进程之间的数据共享分析
  17. Ubuntu根目录下各文件夹的作用
  18. linux上如何快速删除一个目录
  19. SPP-net论文总结
  20. 点滴积累【JS】---JS小功能(button选择颜色)

热门文章

  1. 【uva 10048】Audiophobia(图论--Floyd算法)
  2. Baby-step giant-step算法
  3. Panasonic Programming Contest (AtCoder Beginner Contest 186) E.Throne (数学,线性同余方程)
  4. .net core面试题
  5. K8S(06)web管理方式-dashboard
  6. markdown嵌入图片
  7. hdu 4497 GCD and LCM (非原创)
  8. Leetcode(3)-无重复字符的最长子串
  9. 全方位构造免杀 webshell 小结[一]
  10. TensorFlow+restore读取模型