hdu1069线性dp
/*
dp[i]:取第i个方块时最多可以累多高
*/
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,z;
bool operator<(const node & a)const {
if(x==a.x)return y>a.y;
return x>a.x;
} //按照x从大到小排,x相同的话就按y从小到大排
}block[];
int dp[],tot; int main(){
int x,y,z,n,tt=;
while(scanf("%d",&n),n){
tt++;tot=;
memset(dp,,sizeof dp); for(int i=;i<=n;i++){//最多有六种形态,能够保证一个块不会以两个形态被使用两次
scanf("%d%d%d",&x,&y,&z);
block[++tot].x=x;block[tot].y=y;block[tot].z=z;
block[++tot].x=y;block[tot].y=x;block[tot].z=z;
block[++tot].x=y;block[tot].y=z;block[tot].z=x;
block[++tot].x=z;block[tot].y=y;block[tot].z=x;
block[++tot].x=z;block[tot].y=x;block[tot].z=y;
block[++tot].x=x;block[tot].y=z;block[tot].z=y;
} sort(block+,block++tot); dp[]=block[].z;
for(int i=;i<=tot;i++){
int Max=;
for(int j=;j<i;j++){
if(block[i].x<block[j].x && block[i].y<block[j].y)
Max=max(Max,dp[j]);//找出高度最大的基底
//dp[i]=max(dp[i],dp[j]+block[i].z);为什么不可以这样?
}
dp[i]=Max+block[i].z;
} int ans=;
for(int i=;i<=tot;i++)ans=max(ans,dp[i]);
printf("Case %d: maximum height = %d\n",tt,ans); }
return ;
}
hdu1069线性dp的更多相关文章
- LightOJ1044 Palindrome Partitioning(区间DP+线性DP)
问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...
- Codeforces 176B (线性DP+字符串)
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...
- hdu1712 线性dp
//Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ...
- 动态规划——线性dp
我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...
- POJ 2479-Maximum sum(线性dp)
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33918 Accepted: 10504 Des ...
- poj 1050 To the Max(线性dp)
题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...
- nyoj44 子串和 线性DP
线性DP经典题. dp[i]表示以i为结尾最大连续和,状态转移方程dp[i] = max (a[i] , dp[i - 1] + a[i]) AC代码: #include<cstdio> ...
- 『最大M子段和 线性DP』
最大M子段和(51nod 1052) Description N个整数组成的序列a[1],a[2],a[3],-,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M &g ...
- 『最长等差数列 线性DP』
最长等差数列(51nod 1055) Description N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不 ...
随机推荐
- ELK 集群升级操作
1.配置项变更 2.禁用自动分片 disabled shard allocation curl -XPUT 'localhost:9200/_cluster/settings?pretty' -H ...
- 单源最短路径问题(dijkstra算法 及其 优化算法(优先队列实现))
#define _CRT_SECURE_NO_WARNINGS /* 7 10 0 1 5 0 2 2 1 2 4 1 3 2 2 3 6 2 4 10 3 5 1 4 5 3 4 6 5 5 6 9 ...
- u-boot移植(十三)---代码修改---裁剪及环境变量 一
一.内核裁剪 内核的裁剪首先就是修改我们的配置文件,即 include/configs/jz2440.h 文件,里面定义的很多宏,我们也许用不上的就要去掉. /* * (C) Copyright 20 ...
- bzoj 1724 优先队列 切割木板
倒着的石子合并,注意不是取当前最长木板贪心做,而是取当前最小累加答案: 例如 4 5 6 7 若按第一种思路:ans=22+15+9 第二种:ans=22+13+9,可以先从中间某一块分开,这样答案更 ...
- golang error信息转字符串 x := fmt.Sprintf("%s", err)
_, _, ch, err := m.ZkConn.ChildrenW(node) if err != nil { x := fmt.Sprintf("%s", err) if s ...
- SQL——将表中的最大ID+1插入新的ID中------Insert into 表 MAX(表id) +1
表结构:group表(groupid int,groupname varchar) 表中数据:id name 分组1 分组2 分组3 分组4 ----------------------------- ...
- python队列queue 之优先级队列
import queue as Q def PriorityQueue_int(): que = Q.PriorityQueue() que.put(10) que.put(1) que.put(5) ...
- es集群数据库~基本安装
1 安装java环境 yum -y install java-1.8.0-openjdk*->需要最新的JDK环境1.82 安装 es curl -L -O https://artifa ...
- mysql 架构 ~异地容灾
一 简介 我们来探讨下多机房下的mysql架构二 目的: 首先要清楚你的目的 1 实现异地机房的容灾备份 2 实现异地机房的双活 三 叙说 1 实现异地机房的容灾备份 ...
- jquery 学习(三) - 遍历操作
HTML代码 <p>1111</p> <p>1111</p> <p>1111</p> <p>1111</p&g ...