HDU
来源:互联网 发布:等到烟火清 知乎 编辑:程序博客网 时间:2024/06/16 15:29
/*基础dpC - Monkey and Banana时间: 2017/02/20题意:叠放立方体,使其叠的高度最大。在按底的长宽排序后,进行求最大子序列和题解:1. 在按底的长宽排序后,进行求最大子序列和2. 类似嵌套问题,记忆化搜索*/#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>#include<map>using namespace std;#define N 210#define INF 0x3f3f3f3fstruct code{ int x,y,z;}f[N];int mp[N][N],dp[N];int n;int dfs(int i){ int &ans = dp[i]; if(ans > 0) return ans; ans = f[i].z; for(int j = 0; j < 3*n; j++) { if(mp[i][j]) ans = max(ans, dfs(j)+f[i].z); } return ans;}int main(){ int k = 0; while(~scanf("%d",&n)&&n) { k++; int n1 = n; int i = 0; while(n1--) { int a[3]; scanf("%d%d%d",&a[0],&a[1],&a[2]); sort(a,a+3); f[i].y = f[i+1].z = f[i+2].x = a[1]; f[i].x = f[i+1].x = f[i+2].z = a[2]; f[i].z = f[i+1].y = f[i+2].y = a[0]; i += 3; } memset(mp,0,sizeof(mp)); memset(dp,0,sizeof(dp)); for(int i = 0; i < 3*n; i++) { for(int j = 0; j < 3*n; j++) { if(f[i].x < f[j].x && f[i].y < f[j].y) mp[i][j] = 1; } } int maxn = 0; for(int i = 0; i < 3*n; i++) { maxn = max(maxn,dfs(i)); } printf("Case %d: maximum height = %d\n",k,maxn); } return 0;}
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- logging库的使用
- Leetcode 566(Java)
- Android中TextView开头空两格的问题
- Wiggle Subsequence
- 几种简单的排序总结
- HDU
- Hibernate的三种状态转换
- 【Java基础】Java字符串常用操作(String类)
- WAMPServer随写笔记,PHP语言结构语句
- django中的forms构建
- Mapreduce实例---流量汇总并按流量大小倒序排序
- 游戏开发中常用的MessageBox
- java中String类的构造函数
- AIDL使用学习(三):源码深入分析