hdu 1069 Monkey and Banana (LIS)
2013-05-25 00:11
477 查看
Problem - 1069
随便找到的一道题目。
题意是给出一些的长方体,长方体可以用任意次数,可以任意翻转。如果一个长方体可以叠在另一个长方体上,条件是这个长方体的长和宽严格小于另一个长方体的长和宽。问给出的n种长方体最高可以叠到多高。
因为长方体有三种不同的面,而且长方体的长和宽要严格小于前一个,所以可以将一个长方体拆成三种不同的面作为底面的长方体,而且假设长总是大于宽的。将长方体按照长和宽排序,然后假设len[i]是放置第i个长方体的时候能得到的最大高度,之后的做法基本上跟LIS的操作一样了。
代码如下:
View Code
——written by Lyon
随便找到的一道题目。
题意是给出一些的长方体,长方体可以用任意次数,可以任意翻转。如果一个长方体可以叠在另一个长方体上,条件是这个长方体的长和宽严格小于另一个长方体的长和宽。问给出的n种长方体最高可以叠到多高。
因为长方体有三种不同的面,而且长方体的长和宽要严格小于前一个,所以可以将一个长方体拆成三种不同的面作为底面的长方体,而且假设长总是大于宽的。将长方体按照长和宽排序,然后假设len[i]是放置第i个长方体的时候能得到的最大高度,之后的做法基本上跟LIS的操作一样了。
代码如下:
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; struct Node { int l[3]; } rec[111]; bool cmp(Node a, Node b) { if (a.l[1] != b.l[1]) return a.l[1] < b.l[1]; return a.l[2] < b.l[2]; } int len[111]; int main() { // freopen("in", "r", stdin); int n, cas = 1; while (cin >> n && n) { for (int i = 0; i < n; i++) { for (int j = 0; j < 3; j++) { cin >> rec[i * 3].l[j]; } sort(rec[i * 3].l, rec[i * 3].l + 3); for (int j = 1; j <= 2; j++) { rec[i * 3 + j] = rec[i * 3]; swap(rec[i * 3 + j].l[0], rec[i * 3 + j].l[1]); } swap(rec[i * 3 + 2].l[0], rec[i * 3 + 2].l[2]); } n *= 3; int mx = 0; sort(rec, rec + n, cmp); for (int i = 0; i < n; i++) { len[i] = 0; for (int j = 0; j < i; j++) { if (rec[j].l[1] < rec[i].l[1] && rec[j].l[2] < rec[i].l[2]) { len[i] = max(len[j], len[i]); } } len[i] += rec[i].l[0]; mx = max(mx, len[i]); } printf("Case %d: maximum height = %d\n", cas++, mx); } return 0; }
View Code
——written by Lyon
相关文章推荐
- HDU1069-LIS变形-Monkey and Banana
- hdu1069 Monkey and Banana(二维LIS)
- HDU 1069 Monkey and Banana(LIS最长上升子序列)
- hdu(1069)——Monkey and Banana(LIS变形)
- HDU 1069 Monkey and Banana LIS变形
- HDU 1069 Monkey and Banana (动态规划+LIS)
- 【HDU 1069 】Monkey and Banana 【 求LIS的思想 DP 】
- hdu 1069 Monkey and Banana 再来一波DP啦~~LIS的变形,会最大上升子序列就可以A啦~
- 【DP|LIS】HDU-1069 Monkey and Banana
- hdu 1069 Monkey and Banana LIS变形
- HDU 1069 Monkey and Banana DP LIS
- HDU 1069 Monkey and Banana (LIS)
- HDU 1069 Monkey and Banana DP LIS变形题
- HDU 1069 Monkey and Banana DP LIS
- HDU - 1069 Monkey and Banana(DAG)
- hdu 1069 Monkey and Banana
- Monkey and Banana HDU - 1069------DP
- HDU 1069 Monkey and Banana(DP)
- hdu 1069 Monkey and Banana (DP)
- hdu 1069 Monkey and Banana(最长递增子序列的变形)