动态规划训练15 [Monkey and Banana HDU - 1069 ]

Monkey and Banana

  HDU - 1069 

题意大致是将一个长方体通过旋转,使得摞起来的建筑最高。但是必须满足这么一个条件,那就是上面的长方体的底面一定要完全被下一个长方体的底面完全覆盖,并且要有空位,就像楼梯那样。

由于每一个长方体可以任意使用,而实际上,最多只能被用3次,即长方体的3个棱分别为高的情况下。

所以我们就可以针对每一个长方体生成3个不同的体位。然后把它加入数组里面去。这样的话数组里面的长方体就只能被使用一次。

然后我们定义dp[i]代表的是以第i个结尾的塔的最大高度,那么状态转移就可以写成:

dp[i] = max(d[[i],dp[j] + h[i]),其中i,j满足第i个长方体的底面一定要被第j个厂房体的底面完全覆盖住


#include <iostream>
#include <cstdio> 
#include <algorithm>
#include <cstring>
using namespace std;
const int MAX = 200;
struct P{int a,b,h;P(int a1,int b1,int h1):a(a1),b(b1),h(h1){} P(){		}friend bool operator<(P p1,P p2){if(p1.a == p2.a) return p1.b < p2.b;return p1.a < p2.a;}
};
P ps[MAX];
int h[MAX];
int dp[MAX];
int cnt = 0;
int x[3];
int main(){int n,cas = 0;while(scanf(" %d",&n) != EOF && n){memset(dp,0,sizeof(dp));cnt = 0;for(int i = 0;i < n;i++){scanf(" %d %d %d",&x[0],&x[1],&x[2]);sort(x,x+3);ps[cnt++] = P(x[0],x[1],x[2]);ps[cnt++] = P(x[0],x[2],x[1]);ps[cnt++] = P(x[1],x[2],x[0]);}sort(ps,ps+cnt);int ans = 0;for(int i = 0;i < cnt;i++){dp[i] = ps[i].h;for(int j = 0;j < i;j++){if(ps[i].a > ps[j].a && ps[i].b > ps[j].b){dp[i] = max(dp[i],dp[j] + ps[i].h);}}ans = max(ans,dp[i]);}printf("Case %d: maximum height = %d\n",++cas,ans); }return 0;
}




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客-无形的博弈【结论题,快速幂】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1104/A 题目大意 一个010101序列&#xff0c;如果首项是000&#xff0c;那么你就可以变111或者不变。如果是111那么对方可以选择变000或者不变&#xff0c;如果全变成0那么你获胜&#xff0c;如果永远不能全变成0那么对手…

2、JAVA开发环境的搭建

上次说到java应用之所以做到跨平台&#xff0c;是因为其依赖于java虚拟机&#xff0c;java想要运行需要依赖于特定的运行环境&#xff0c;称为JRE&#xff0c;如果想要开发java应用&#xff0c;则需要用到开发工具包&#xff0c;也就是JDK&#xff0c;所以这里就要说一下这几者…

Serilog Tutorial

在过去的几年中&#xff0c;结构化日志已经大受欢迎。而Serilog是 .NET 中最著名的结构化日志类库 ,我们提供了这份的精简指南来帮助你快速了解并运用它。0. 内容设定目标认识Serilog事件和级别触发和收集结构化数据为过滤和关联添加事件标记大海捞针 [Finding needles in the …

动态规划训练16 [Doing Homework HDU - 1074 ]

Doing Homework HDU - 1074 这是一道状态压缩DP&#xff08;从N < 15就可以看出来&#xff09;。 我们定义二进制状态S代表的是目前已经安排好的任务 dp[S].val代表的是目前已经安排好的任务的扣分的最小值 dp[S].sumT代表的是目前已经安排好的任务所需要的时间 状态转移…

3、java中的数据类型和运算符

数据类型 数据类型是对数据存储在内存中位置的一种抽象表示&#xff0c;java的数据类型总体上分为两大类&#xff1a;基本数据类型和引用数据类型。 1、基本数据类型 基本数据类型是语言本身定义的&#xff0c;数据结构上有说基本数据类型表示的是真实的数字和字符&#xff0…

牛客-十二桥问题【最短路,状压dp】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1104/B 题目大意 nnn个点mmm条边的无向图&#xff0c;kkk条必须经过的边&#xff0c;求从1出发经过这kkk条边再回到1的最短路。 解题思路 我们每条边两段的端点和1是我们需要用到的特征点&#xff0c;我们用计算出每个特征…

动态规划训练17 [Super Jumping! Jumping! Jumping! HDU - 1087 ]

Super Jumping! Jumping! Jumping! HDU - 1087 过于简单懒得说了 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int MAX 1000; int a[MAX]; int dp[MAX]; main(){int N;while(scanf("%d",&N) ! E…

使用DDD、事件风暴和Actor来设计反应式系统

领域驱动设计&#xff08;domain-driven design&#xff0c;DDD&#xff09;通常在微服务领域用于查找边界&#xff08;限界上下文&#xff09;。同样来自DDD的聚合&#xff08;aggregate&#xff09;对于定义持久化和一致性的范围来讲也是很重要的。 但是&#xff0c;并不是领…

4、java中的流程控制(程序结构)

说一下java的流程控制&#xff08;程序结构&#xff09;&#xff0c;其实对于计算机而言&#xff0c;无非就那几类执行流程&#xff08;程序结构&#xff09;&#xff0c;程序从头到尾依次执行每一行代码&#xff0c;这就是顺序结构&#xff1b;也可能在执行过程中遇到条件判断…

jzoj1402-偷懒的小X【贪心】

正题 题目链接:https://jzoj.net/senior/#contest/show/2940/0 题目大意 一颗满二叉树&#xff0c;第iii个点的儿子是i∗2i*2i∗2和i∗21i*21i∗21&#xff0c;然后nnn个数填入&#xff0c;求一个满足小根堆性质的字典序最大的路线。 解题思路 我们计算出每个点下面有多少个…

动态规划训练18 [免费馅饼 HDU - 1176 ]

免费馅饼 HDU - 1176 这也是一道比较简单的动态规划 dp[i][j]表示到时间i&#xff0c;位置为j所能采集的最大馅饼数量 状态转移非常好写 dp[i][j] max{dp[i-1][j],dp[i-1][j-1],dp[i-1][j1]} T[j][i] 其中T[j][i]表示的是时间为i&#xff0c;位置为j落下的馅饼的数量 #in…

站在巨人肩上的.NET Core 2.1

.NET Core 1.0自发布两年以来&#xff0c;得到了开发者群体相当高地认可。 下图来自Stack overflow survey 2018的统计&#xff1a;.NET Core已经成为前五的主流框架工具&#xff0c;现今借鉴了优秀的设计原则和开发体验可谓站在巨人肩上。这一切归功于.NET团队认识和总结了大量…

5、java中的数组

1、简介 数组是一种具有随机存取特性的数据结构&#xff0c;是内存上一段连续区域的表示&#xff0c;是实现顺序存储的基础&#xff0c;数组只能用于存储同一类型的数据。数组的长度在初始化时定义之后就不可更改&#xff0c;并且在初始化数组时必须指定数组的长度。 2、数组…

jzoj1403-渡河【SPFA】

正题 题目链接:https://jzoj.net/senior/#contest/show/2940/1 题目大意 一个n∗nn*nn∗n的图&#xff0c;从000走到111价格为1。kkk个询问&#xff0c;询问一个点离边界的最小价格。 解题思路 反向从边界开始跑SPFASPFASPFA即可。 codecodecode #pragma GCC optimize(&quo…

动态规划训练19、最短路 [Help Jimmy POJ - 1661 ]

Help Jimmy POJ - 1661 题意&#xff1a;大致是一个人从某个点开始下落&#xff0c;下落的速度是1m/s&#xff0c;然后在平台上的时候可以左右移动&#xff0c;移动的速度也是1m/s&#xff0c;但是这里有一个限制&#xff0c;就是说每次下落的距离不能超过一个给定的数值。问你…

【活动(北京)】Global Azure Bootcamp

活动议程活动内容08:30-08:50报到08:50-09:10活動开场Study4 - 陈科融(MVP)STB Chain Foundation - 劉海峰(MVP)MVP Program - Christina Liang(MVP CPM)09:10-10:00区块链让软件资产化成为现实刘海峰(MVP) - STBChain Foundation主席10:10-11:00基于Azure PaaS的网站应用刘元纶…

jzoj1404-菱形内的计数【模拟】

正题 题目链接:https://jzoj.net/senior/#main/show/1404 题目大意 给出一个菱形中有一些边&#xff0c;求有多少个中间没有边的平行四边形。 解题思路 我们将一个平行四边形拆成两个等腰三角形和一个平行于菱形中间对角线的平行四边形&#xff0c;我们可以判断上面那个等腰…

6、java中的排序算法

1、简介 排序是将元素按着指定关键字的大小递增或递减进行数据的排列&#xff0c;排序可以提高查找的效率 2、排序算法的分类 排序算法可大致分为四类七种&#xff0c;具体分类如下&#xff1a; 插入排序&#xff1a;直接插入排序、希尔排序 交换排序&#xff1a;冒泡排序、…

用.NET Core实现装饰模式和.NET Core的Stream简介

该文章综合了几本书的内容.某咖啡店项目的解决方案某咖啡店供应咖啡, 客户买咖啡的时候可以添加若干调味料, 最后要求算出总价钱.Beverage是所有咖啡饮料的抽象类, 里面的cost方法是抽象的. description变量在每个子类里面都需要设置(表示对咖啡的描述).每个子类实现cost方法, …

动态规划训练20 [Treats for the Cows POJ - 3186 ]

Treats for the Cows POJ - 3186 简单的区间DP&#xff0c;就不解释了。 #include<iostream> #include<cstdio> using namespace std; const int INF1e9; const int maxn2005; int n, a[maxn]; int dp[maxn][maxn]; int main() {scanf("%d",&n);for(…