给你n砖,有三个长宽高。每一个无限制的访问。叠加在一个条件的长度和宽度必须严格格长度和宽度大于下面的一个,叠加求最大高度。

思维:

每块砖终于放置在根据本方法可以把六种,然后,对于长度和宽度排序。这是LIS的变化的问题

#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set>
#include<cctype> #define ll long long #define LL __int64 #define eps 1e-8 #define inf 0xfffffff //const LL INF = 1LL<<61; using namespace std; //vector<pair<int,int> > G;
//typedef pair<int,int > P;
//vector<pair<int,int> > ::iterator iter;
//
//map<ll,int >mp;
//map<ll,int >::iterator p; int box[500][3];
int dp[1000]; int cnt; typedef struct Node {
int x,y,z;
}; Node node[500]; void init() {
memset(box,0,sizeof(box));
memset(dp,0,sizeof(dp));
cnt = 0;
} /*void cal(int x,int y,int z) {
box[cnt][0] = x,box[cnt][1] = y,box[cnt++][2] = z;
box[cnt][0] = y,box[cnt][1] = x,box[cnt++][2] = z;
box[cnt][0] = y,box[cnt][1] = z,box[cnt++][2] = x;
box[cnt][0] = z,box[cnt][1] = y,box[cnt++][2] = x;
box[cnt][0] = x,box[cnt][1] = z,box[cnt++][2] = y;
box[cnt][0] = z,box[cnt][1] = x,box[cnt++][2] = y;
}*/ void cal(int x,int y,int z) {
node[cnt].x = x,node[cnt].y = y,node[cnt++].z = z;
node[cnt].x = y,node[cnt].y = x,node[cnt++].z = z;
node[cnt].x = y,node[cnt].y = z,node[cnt++].z = x;
node[cnt].x = z,node[cnt].y = y,node[cnt++].z = x;
node[cnt].x = x,node[cnt].y = z,node[cnt++].z = y;
node[cnt].x = z,node[cnt].y = x,node[cnt++].z = y;
} bool cmp(Node x,Node y) {
if(x.x == y.x) {
if(x.y == y.y)return x.z < y.z;
return x.y < y.y;
}
return x.x < y.x;
} int main() {
int n;
int Case = 0;
while(scanf("%d",&n),n) {
init();
for(int i=0;i<n;i++) {
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
cal(x,y,z);
}
int ans = 0;
sort(node,node+cnt,cmp);
/*for(int i=0;i<cnt;i++) {
printf("%d %d %d**\n",node[i].x,node[i].y,node[i].z);
}*/
for(int i=0;i<cnt;i++)
dp[i] = node[i].z;
for(int i=0;i<cnt;i++) {
for(int j=1;j<i;j++) {
int a = node[j].x;
int b= node[i].x;
int c = node[j].y;
int d= node[i].y;
if(node[j].x < node[i].x && node[j].y < node[i].y) {
dp[i] = max(dp[j] + node[i].z,dp[i]);
}
}
if(ans < dp[i])
ans = dp[i];
}
printf("Case %d: maximum height = %d\n",++Case,ans);
}
return 0;
}

ZOJ1093 动态规划的更多相关文章

  1. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  2. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  3. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  4. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

  5. C#动态规划查找两个字符串最大子串

     //动态规划查找两个字符串最大子串         public static string lcs(string word1, string word2)         {            ...

  6. C#递归、动态规划计算斐波那契数列

    //递归         public static long recurFib(int num)         {             if (num < 2)              ...

  7. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  8. 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划

    [BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...

  9. POJ 1163 The Triangle(简单动态规划)

    http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

随机推荐

  1. Qt移动版优化后台云服务、支持跨平台开发

    http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5MDE0Mjc4MA==&appmsgid=10000461&itemidx=2&am ...

  2. [黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)

    ---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. 集合框架按其所实现的接口, 大 ...

  3. phpStorm 新建文件SVN不提交的解决的方法

    phpStorm中新建文件夹,可是打开文件夹.却没有提交到SVN.导致每次都必须手动增加.假设新增的文件夹或者文件较多文件夹较深,easy遗漏.(default7#zbphp.com) 解决的方法: ...

  4. uva 10655 - Contemplation! Algebra(矩阵高速幂)

    题目连接:uva 10655 - Contemplation! Algebra 题目大意:输入非负整数,p.q,n,求an+bn的值,当中a和b满足a+b=p,ab=q,注意a和b不一定是实数. 解题 ...

  5. Android中使用SurfaceView和Canvas来绘制动画

    事实上每一个View中都有Canvas能够用来绘制动画.仅仅须要在这个View中重载onDraw()方法就能够,可是SurfaceView类是一个专门用来制动动画的类. Canvas(中文叫做&quo ...

  6. python - ImportError: No module named http.cookies error when installing cherrypy 3.2 - Stack Overflow

    python - ImportError: No module named http.cookies error when installing cherrypy 3.2 - Stack Overfl ...

  7. Linux源文件夹结构呈现

    1.arch文件夹: - 相关的存储在不同平台上的代码,每个平台都采用了不同的文件夹来区分. ******Alpha平台 ******Arm平台 ******Arv32平台 ******X86平台 2 ...

  8. oracle 之 内存—鞭辟近里(三)

    oracle 之 内存—鞭辟近里(三) 今天是2013-07-08,今天晚上突然接到一个电话,我的外甥问我的qq是多少,我感觉很吃惊,他长大了.在他现在这个年龄就开始接触网络,我难免有少许担心,希望他 ...

  9. Terracotta收购Ehcache (转)

    随着Terracotta对Ehcache的收购成行,业界两大知名的开源Java缓存产品走到了一起.以提供JVM级“POJO集群”而闻名于世的Terracotta可以将运行在单个JVM上的多线程应用移植 ...

  10. hdu1695(莫比乌斯反演)

    传送门:GCD 题意:求[1,n],[1,m]gcd为k的对数. 分析:莫比乌斯入反演门题,gcd(x,y)==k等价于gcd(x/k,y/k)==1,求出[1,n][1,m]互质的对数,在减去[1, ...