tyvj 1387 迷你火车头
dp百题进度条[1/100]
一列火车有一个火车头拖着一长串的车厢,每个车厢有若干个乘客。
一旦火车头出了故障,所有的车厢就只能停在铁轨上了,因此铁路局给每列火车配备了三个迷你火车头,每个迷你火车头可以拖动一定数量的车厢,以便火车头发生故障后能够拖走部分车厢。
铁路部门对迷你火车头作了如下规定:
1.迷你火车头能够拖动的最大车厢数是确定的,这个数量对三个迷你火车头都是相同的。
2.一旦火车头发生故障,迷你火车头要拖走尽可能多的旅客,每节车厢的旅客数事先是已知的,并且旅客不得随意更换车厢。
3.一个迷你火车头拖走的车厢必须是连续的,所有车厢从1开始编号。
假如有7节车厢,一个迷你火车头最多可以拖动二节车厢,1到7号车厢中的旅客人数分别为35,40,50,10,30,45和60。
如果三个迷你火车头拖走的车厢分别是1-2,3-4和6-7,它们带走的旅客总数将达到240人,其它任何方案都不可能超过该数,所以240就是这个问题的解。
给定车厢数,每节车厢的旅客人数和一个迷你火车头能拖动的最大车厢数,写一个程序求出三个迷你火车头最多能带走的旅客数。
输入格式
输入文件共有三行。
第一行为一个正整数n,其中n<=50,000,表示车厢总数;
第二行为n个用空格隔开的整数,依次表示n节车厢的旅客人数,每节车厢人数不超过100;
第三行为一个正整数m表示迷你火车头能够拖动的最大车厢数,其中m<=n/3。
输出格式
输出文件仅有一行包含一个整数表示三个迷你火车头最多能带走的旅客数。
1
测试样例1
输入
7
35 40 50 10 30 45 60
2
输出
240
我们定义dp[i][j]为第i个火车头时,拖了前j个车厢的最大值
我们用front数组来存前缀
状态转移方程
dp[i][j] = max_(dp[i][j - 1],dp[i - 1][j - m] + front[j] - front[j - m]);
Code
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 50000 + 5;
int n,t,m;
int dp[5][MAXN],train[MAXN],front[MAXN];
int max_(int x,int y){
if (x > y) return x;
else return y;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for (register int i = 1 ; i <= n ; i++) scanf("%d",&train[i]),front[i] = front[i - 1] + train[i];
scanf("%d",&m);
for (register int i = 1 ; i <= 3 ; i++){
for (int j = m ; j <= n ; j++){
dp[i][j] = dp[i][j - 1];
dp[i][j] = max_(dp[i][j - 1],dp[i - 1][j - m] + front[j] - front[j - m]);
}
}
printf("%d\n",dp[3][n]);
}
return 0;
}
tyvj 1387 迷你火车头的更多相关文章
- ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程
从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...
- [LeetCode] Mini Parser 迷你解析器
Given a nested list of integers represented as a string, implement a parser to deserialize it. Each ...
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- [BZOJ3224]Tyvj 1728 普通平衡树
[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...
- 循序渐进做项目系列(4)迷你QQ篇(2)——视频聊天!(附源码)
一·效果展示 源码派送:MiniQQ1.1 文字聊天的实现参见:循序渐进做项目系列(3):迷你QQ篇(1)——实现客户端互相聊天 二·服务端设计 对于实现视频聊天而言,服务端最核心的工作就是要构造多媒 ...
- 循序渐进做项目系列(3):迷你QQ篇(1)——实现客户端互相聊天
<循序渐进做项目系列迷你QQ篇>将陆续介绍客户端聊天,文件传输,加好友,群聊,包括语音聊天,视频聊天,远程桌面等等需求如何实现,感兴趣的朋友可以持续关注.考虑到某些需求较为复杂,本系列采用 ...
- 迷你MVVM框架 avalonjs 入门教程
新官网 请不要无视这里,这里都是链接,可以点的 OniUI组件库 学习教程 视频教程: 地址1 地址2 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定 作用域绑定(ms-contro ...
- 自用迷你版的Deferred
啥也不说贴代码,项目用 /** * 迷你版的deferred */ function Deferred(func) { if (this instanceof Deferred === false) ...
- 迷你版jQuery——zepto核心源码分析
前言 zepto号称迷你版jQuery,并且成为移动端dom操作库的首选 事实上zepto很多时候只是借用了jQuery的名气,保持了与其基本一致的API,其内部实现早已面目全非! 艾伦分析了jQue ...
随机推荐
- 新闻实时分析系统 Spark Streaming实时数据分析
1.Spark Streaming功能介绍1)定义Spark Streaming is an extension of the core Spark API that enables scalable ...
- Linux -- 信号发送实现
信号是Linux系统响应某些条件而产生的一个事件,接收该信号的进程会响应地采取一些行动 signal 定义 在进程控制块 (PCB Process Control Block) 的数据结构中,存在 ...
- Git之GitFlow工作流
一. GitFlow 介绍 1.1 什么是 GitFlow GitFlow 是一种 Git 工作流,它是团队成员遵守的一种代码管理方案 . 1.2 GitFlow 常用分支说明 分支名称 分支说明 P ...
- mysql免密登录和修改密码
(1)停止mysql服务 /etc/init.d/mysqld stop (2)跳过密码验证 mysqld_safe --skip-grant-tables & ( ...
- react-starter-projects
react-starter-projects These are repositories that you copy and modify to create your own React app. ...
- Spring Boot 最简单整合Shiro+JWT方式
简介 目前RESTful大多都采用JWT来做授权校验,在Spring Boot 中可以采用Shiro和JWT来做简单的权限以及认证验证,在和Spring Boot集成的过程中碰到了不少坑.便结合自身以 ...
- 洛谷 题解 P5595 【【XR-4】歌唱比赛】
本蒟蒻又双叒叕被爆踩了. 考试时一遍过 其实这题还是很简单的,难度不会大于普及组T1. CSP 2019 RP++ 看开始看到题目,觉得特别长,不想看... 我来和你们分析分析题目,你们就都可以秒了. ...
- HotStuff共识协议详解
1. 前言 HotStuff提出了一个三阶段投票的BFT类共识协议,该协议实现了safety.liveness.responsiveness特性.通过在投票过程中引入门限签名实现了O(n)的消息验证复 ...
- 17.Django学习之django自带的contentType表
通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/aaronthon/article/details/81714496 ...
- vue 各种打包坑
1,报错 Refused to load the image 'http://localhost:8080/favicon.ico' because it violates the following ...