题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1069

一开始看到这题我想不到什么思路,后来翻《算法竞赛入门经典》时发现它是第九章第二节的例题9-2巴比伦塔

书上提供了两点解题的点:

1.用有向无环图DAG的模型,其模板代码为:

int dp(int i)
{int& ans = d[i];if (ans > 0)return ans;ans = 1;for (int j = 1; j <= n; j++)if (G[i][j])ans = max(ans, dp(j) + 1);return true;
}

其中d[i]表示从点I到终点的最大值,G[i][j]表示i是否能到j点

2.如果用G[i][j]数组解题,会容易出现数组过大的情况,所以设置了(idx,k)这个二元组来表示,idx为立方体的编号,1<=k<=3,表示三条边。

最后的代码为:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>using namespace std;const int N = 35;int maps[N][N];
int d[N][N];
int k;
int n;void get(int *v, int i, int height)
{int ii=0;int j;for (j = 1; j <= 3; j++)if (j != height)v[ii++] = maps[i][j];
}int dp(int i, int j)
{int ii, jj;int& ans = d[i][j];if (ans > 0){return ans;}ans = 0;int v[3], v2[3];get(v, i, j);for(ii=1;ii<=n;ii++)for (jj = 1; jj <= 3; jj++){get(v2, ii, jj);if (v2[0] < v[0] && v2[1] < v[1])ans = max(ans, dp(ii, jj));}ans += maps[i][j];return ans;
}int main()
{int i, j, k;int ans;k = 1;while (scanf("%d",&n)!=EOF){if (n == 0)break;memset(d, 0, sizeof(d));ans = 0;for (i = 1; i <= n; i++){     for (j = 1; j <= 3; j++)scanf("%d", &maps[i][j]);sort(maps[i] + 1, maps[i] + 1 + 3);}for(i=1;i<=n;i++)for (j = 1; j <= 3; j++){ans = max(dp(i, j), ans);}printf("Case %d: maximum height = %d\n", k++, ans);}return 0;
}

杭电1069 Monkey and Banana相关推荐

  1. HDUOJ 1069 Monkey and Banana

    HDUOJ 1069 Monkey and Banana 题目链接 Problem Description A group of researchers are designing an experi ...

  2. HDU 1069 Monkey and Banana 最长上升子序列进阶(动态规划)

    HDU 1069(动态规划) Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  3. HDOJ 1069 Monkey and Banana

    1:每一组X,Y,Z对应3个立方体 2:按面积从小到大DP Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Lim ...

  4. HDU 1069 Monkey and Banana(简单图解,经典DP,最大上升子序列变形)

    题目链接 今天做的第二题,感觉比较经典,详细记录一下吧! Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

  5. 三维最长上升子序列问题——HDU 1069 Monkey and Banana

    题目: A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a ...

  6. hdu 1069 Monkey and Banana (LIS)

    Problem - 1069 随便找到的一道题目. 题意是给出一些的长方体,长方体可以用任意次数,可以任意翻转.如果一个长方体可以叠在另一个长方体上,条件是这个长方体的长和宽严格小于另一个长方体的长和 ...

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

    题意: 如今给你n个石块,然后它由坐标来表示(x,y,z).可是它能够有不同的方法,也就是说它的三个坐标能够轮换着来的. 石块的数量不限,可是每次都必须保持上底面的长和宽严格递减,然后问你用这些石块所 ...

  8. HDU 1069 Monkey and Banana

    传送门 #include<iostream> #include<algorithm> #include<map> #include<set> #incl ...

  9. hdu 1069 Monkey and Banana 【动态规划】

    题目 题意:研究人员要测试猴子的IQ,将香蕉挂到一定高度,给猴子一些不同大小的箱子,箱子数量不限,让猩猩通过叠长方体来够到香蕉. 现在给你N种长方体, 要求:位于上面的长方体的长和宽  要小于  下面 ...

最新文章

  1. PostgreSQL系统表和视图
  2. stm32f401 i2s 时序图
  3. 什么样的计算机书才是市场需要的——2009年计算机图书选题策划方向(三) (全文完)...
  4. TortoiseSVN使用方法
  5. roads 构筑极致用户体验_智美双极 引领旗舰 亚洲龙探索革新的高品质体验
  6. 利用Android Camera2 的照相机api 实现 实时的图像采集与预览
  7. 简单获取PNG免扣素材,提升设计效率
  8. BZOJ3139: [Hnoi2013]比赛
  9. mysql 大表更新数据类型_MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)...
  10. Atitit.异常的设计原理与 策略处理 java 最佳实践 p93
  11. 数据结构之二叉树实现排序功能
  12. vmlinuz的产生
  13. ESP32-C3入门教程 WiFi篇⑥——基于串口的 WiFi 智能配网
  14. Mac OS 上MPV播放器常用快捷键
  15. LSTM反向传播公式推导
  16. 美团2015年校园招聘部分笔试题
  17. 2021最新外卖霸王餐小程序、H5、微信公众号版外系统源码|霸王餐美团/饿了么系统 粉丝裂变玩源码下载
  18. 小米2s android7.0秋大,老炮儿?小米2s升级MIUI 7流畅一逼!
  19. APP——功耗测试(耗电测试)——adb命令简单获取分析
  20. (转)《达·芬奇密码》解读解密

热门文章

  1. 28岁转行程序员?别想了、没戏。事实真就如此残酷?
  2. 转行经历|裸辞九个月,终于拿到第一份工作的offer...
  3. 南卡和OPPO蓝牙耳机哪个好用?高品质的蓝牙耳机测评
  4. react-native-beacons-manager在Android上的使用 --工作笔记
  5. 松下GH5相机SD卡格式化后MP4视频碎片重组数据恢复方法
  6. jQuery UI Datepicker 选择时分秒
  7. Linux进程间关系之终端与终端登录
  8. 石家庄联通宽带DNS服务器地址
  9. GAMES101笔记_Lec01_计算机图形学概述 Overview of Computer Graphics
  10. 夏天我都冷到瑟瑟发抖-用单片机diy懒人挂脖风扇方案