动态规划训练12 [G - You Are the One HDU - 4283 ]

2012天津区域赛的一道题目,题目链接如下

You Are the One

  HDU - 4283 


这道题目要说思想的话其实并不是很难,但是我却没做出来。关键就在于读题读不懂(How Vegetable I am!),到最后搜了别人的题解才明白这道题想要说什么:

题目大意就是说给定一个有序序列和一个栈,对于队伍前头的一个人,有两个操作,一个是直接迈向舞台,另一个操作就是迈入栈中。在一个时间下,迈向舞台的人可以是原始队伍里的人,也可以是栈里面的人。举例来说,假定队伍此时为 队首=>4 5<=队尾,栈此时为 栈顶=>3 2 1 <=栈底,那么下一个时刻可能是4进入栈中,或者4进入舞台,或者3从栈中去向舞台。

我们考虑如下事实:

考虑区间[l,r],区间长度k = r-l+1。

如果区间的第一个元素可能是第1 一直到第 k个进入舞台的,假设第一个元素是第p个进入舞台的 1<=p<=k,那么我们知道第一个元素一定要先入栈,区间[l+1,l+k-1]中的元素一定会先第一个元素而进入舞台,这样的话,就转化到了子结构dp[l+1][l+k-1]中去了。

同时[l+k,r]中的元素一定后于第一个元素而进入舞台。他们共同要等待的耗费为p*sum[l+k,r],另外还有一部分耗费为dp[l+k][r]

综上所述,得到转移方程

dp[l][r] = min(dp[l][r],dp[l+1][l+k-1] + (k-1)*a[l+p-1] + p*sum[l+k,r] + dp[l+k][r]);


注意:代码中用的区间方式为左闭右开。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAX = 105;
int dp[MAX][MAX];
int a[MAX];
int sum[MAX];
int n;
int main(){int T;scanf(" %d",&T);int cas = 0;while(T--){memset(dp,0,sizeof(dp));scanf(" %d",&n);sum[0] = 0;for(int i = 0;i < n;i++){scanf(" %d",&a[i]);sum[i+1] = sum[i] + a[i];}//左闭右开 for(int k = 2;k <= n;k++){for(int i = 0;i + k <= n;i++){dp[i][i+k] = 1e9;for(int j = i+1;j <= i + k;j++){//第一个元素的顺序   dp[i][i+k] = min(dp[i][i+k],dp[i+1][j] + (j-i-1)*a[i] + (j-i)*(sum[i+k] - sum[j]) + dp[j][i+k]);}}}printf("Case #%d: %d\n",++cas,dp[0][n]);}return 0;
} 


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

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

相关文章

42、Java服务内存OOM原因分析

1、出现问题的可能原因 对于应用来说内存分配太少 对象创建太多&#xff0c;又没有释放&#xff0c;造成内存泄漏严重&#xff0c;导致内存耗尽 申请太多的系统资源&#xff0c;系统资源耗尽。例如&#xff1a;不断创建线程&#xff0c;不断发起网络连接 2、如何定位问题&a…

jzoj3850-Fibonacci进制【斐波那契倍增】

正题 题目大意:https://jzoj.net/senior/#main/show/3850 题目大意 定义f(i)f(i)f(i)表示第i1i1i1个斐波那契数 一个数转换成斐波那契进制后第iii位的0/10/10/1表示是否需要加上f(i)f(i)f(i)&#xff0c;然后将1∼∞1\sim \infty1∼∞转换成斐波那契进制后依次输出在屏幕上&a…

Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍

前言&#xff1a;.NET Core 是.NET Framework的新一代版本&#xff0c;是微软开发的第一个跨平台 (Windows、Mac OSX、Linux) 的应用程序开发框架&#xff08;Application Framework&#xff09;&#xff0c;未来也将会支持 FreeBSD 与 Alpine 平台。.Net Core也是微软在一开始…

动态规划训练13 [Catch That Cow poj3278]

Catch That Cow POJ - 3278 这道题我看大家用的方法都是bfs搜索&#xff0c;为什么在我看来这就是一个动态规划的题目啊啊啊啊啊啊啊 dp[x]表示从N出发到x所需要的最小时间 那么得到如下转移方程 如果x < N的话&#xff0c;那么只能通过走路来转移&#xff0c;所以dp[x] …

jzoj1246-挑剔的美食家【set,贪心】

正题 题目大意:https://jzoj.net/senior/#main/show/1246 题目大意 nnn头牛&#xff0c;第iii头吃的东西价格大于aia_iai​&#xff0c;鲜嫩度大于bib_ibi​。mmm个吃的&#xff0c;第iii个价格为cic_ici​&#xff0c;鲜嫩度为did_idi​。 求满足所有奶牛的情况下最少要花多少…

DotNetty 跨平台的网络通信库

久以来,.Net开发人员都非常羡慕Java有Netty这样&#xff0c;高效&#xff0c;稳定又易用的网络通信基础框架。终于微软的Azure团队&#xff0c;使用C#实现的Netty的版本发布。不但使用了C#和.Net平台的技术特点&#xff0c;并且保留了Netty原来绝大部分的编程接口。让我们在使用…

26、临时表的创建和重复数据的处理

UPDATE student b SET b.sname dd WHERE b.id (SELECT a.id FROM student a WHERE a.id 3) Mysql中根据条件&#xff08;表A中的字段&#xff09;操作表A中的数据时是不可以的 所以借助临时表来删除/更新重复的数据&#xff0c;原理就是删除每组重复数据中除id值最大的其他…

动态规划训练14 [Max Sum Plus Plus HDU - 1024 ]

Max Sum Plus Plus HDU - 1024 题意大致是说给你你个序列&#xff0c;把它划分成不相交的几个连续的部分&#xff0c;然后把这个几个部分求和&#xff0c;求出和的最大值。 我们定义子结构 dp[i][j] 表示的是从前j个元素&#xff0c;划分成i段所得的最大和。 则我们可以得到…

jzoj1247-队列变换【字符串hash,二分】

正题 题目链接:https://jzoj.net/senior/#main/show/1247 题目大意 一个长度为nnn的字符串&#xff0c;每次选择头或者尾加入新的字符串末端&#xff0c;求字典序最小的新的字符串。 解题思路 我们发现若剩下的字符串比翻转之后份字符串字典序大那么就加入头&#xff0c;否则…

1、java简介

关于java介绍也没什么好说的&#xff0c;在这里简单介绍一下&#xff0c;说起java&#xff0c;我第一想到的就是它的简单和强大&#xff0c;简单是简单易学&#xff0c;开发速度快&#xff1b;强大是其功能强大&#xff0c;各个领域都可使用&#xff0c;其代码一次编译可以处处…

C# 观察者模式 以及 delegate 和 event

观察者模式这里面综合了几本书的资料.需求有这么个项目: 需求是这样的:一个气象站, 有三个传感器(温度, 湿度, 气压), 有一个WeatherData对象, 它能从气象站获得这三个数据. 还有三种设备, 可以按要求展示气象站的最新数据.WeatherData的结构如下:有3个get方法, 分别获取最新的…

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

Monkey and Banana HDU - 1069 题意大致是将一个长方体通过旋转&#xff0c;使得摞起来的建筑最高。但是必须满足这么一个条件&#xff0c;那就是上面的长方体的底面一定要完全被下一个长方体的底面完全覆盖&#xff0c;并且要有空位&#xff0c;就像楼梯那样。 由于每一个长方…

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

正题 题目链接: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;并不是领…