题目链接

题目

题目描述

The cows are trying to become better athletes, so Bessie is running on a track for exactly N (1 ≤ N ≤ 10,000) minutes. During each minute, she can choose to either run or rest for the whole minute.

The ultimate distance Bessie runs, though, depends on her 'exhaustion factor', which starts at 0. When she chooses to run in minute i, she will run exactly a distance of Di (1 ≤ Di ≤ 1,000) and her exhaustion factor will increase by 1 -- but must never be allowed to exceed M (1 ≤ M ≤ 500). If she chooses to rest, her exhaustion factor will decrease by 1 for each minute she rests. She cannot commence running again until her exhaustion factor reaches 0. At that point, she can choose to run or rest.

At the end of the N minute workout, Bessie's exaustion factor must be exactly 0, or she will not have enough energy left for the rest of the day.

Find the maximal distance Bessie can run.

输入描述

  • Line 1: Two space-separated integers: N and M
  • Lines 2..N+1: Line i+1 contains the single integer: Di

输出描述

  • Line 1: A single integer representing the largest distance Bessie can run while satisfying the conditions.

示例1

输入

5 2
5
3
4
2
10

输出

9

说明

Bessie runs during the first minute (distance=5), rests during the second minute, runs for the third (distance=4), and rests for the fourth and fifth. Note that Bessie cannot run on the fifth minute because she would not end with a rest factor of 0.

题解

方法一

知识点:线性dp。

要注意,要求是每次休息要休息到疲劳为 \(0\) ,才能继续跑,并且疲劳为 \(0\) 还能继续休息。

设 \(dp[i][j]\) 为在第 \(i\) 分钟疲劳为 \(j\) 跑的最远距离。有转移方程:

\[\left \{
\begin{array}{l}
dp[i][0] &= \max(dp[i-1][0],dp[i-j][j])\\
dp[i][j] &= dp[i-1][j-1] +d[i]
\end{array}
\right.
\]

前者是休息的转移,后者是跑步的转移。

时间复杂度 \(O(nm)\)

空间复杂度 \(O(nm)\)

方法二

知识点:线性dp。

设 \(dp[i][j][k]\) 为第 \(i\) 分钟,疲劳为 \(j\) ,第 \(i\) 分钟的状态是 \(k\) (0/1,休息/跑步)的最远距离。转移方程为:

\[\left \{
\begin{array}{l}
dp[i][j][0] = \max(dp[i-1][j+1][0] ,dp[i-1][j+1][1]) &,0\leq j \leq m-1\\
dp[i][0][0] = \max(dp[i-1][0][0],dp[i][0][0]) &\\
dp[i][j][1] = dp[i-1][j-1][1] + d[i] &,1\leq j \leq m\\
dp[i][1][1] = \max(dp[i][1][1],dp[i-1][0][0]+d[i]) &
\end{array}
\right.
\]

可以用滚动数组优化空间。

时间复杂度 \(O(nm)\)

空间复杂度 \(O(m)\)

代码

方法一

#include <bits/stdc++.h>

using namespace std;

int d[10007], dp[10007][507];

int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m;
cin >> n >> m;
for (int i = 1;i <= n;i++) cin >> d[i];
memset(dp, -0x3f, sizeof(dp));
dp[0][0] = 0;
for (int i = 1;i <= n;i++) {
///有且只有j = 0只能通过休息得到,因此只有(i,0)能继承休息
for (int j = 0;j <= min(i, m);j++)
dp[i][0] = max(dp[i][0], dp[i - j][j]);///(i,0) 可以通过 (i-j,j) 休息得到
dp[i][0] = max(dp[i][0], dp[i - 1][0]);///也可以通过(i-1,0) 休息得到
for (int j = 1;j <= m;j++)///只能通过跑步得到
dp[i][j] = dp[i - 1][j - 1] + d[i];
}
cout << dp[n][0] << '\n';
return 0;
}

方法二

#include <bits/stdc++.h>

using namespace std;

int d[10007], f[507][2], g[507][2];

int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m;
cin >> n >> m;
for (int i = 1;i <= n;i++) cin >> d[i];
memset(f, -0x3f, sizeof(f));
f[0][0] = 0;
for (int i = 1;i <= n;i++) {
for (int j = 0;j <= m;j++) {
if (j <= m - 1) g[j][0] = max(f[j + 1][0], f[j + 1][1]);
if (j) g[j][1] = f[j - 1][1] + d[i];
}
g[0][0] = max(g[0][0], f[0][0]);
g[1][1] = max(g[1][1], f[0][0] + d[i]);
for (int j = 0;j <= m;j++)
f[j][0] = g[j][0], f[j][1] = g[j][1];
}
cout << f[0][0] << '\n';
return 0;
}

NC24949 [USACO 2008 Jan S]Running的更多相关文章

  1. [USACO 2008 Jan. Silver]架设电话线 —— 最短路+二分

    一道图论的最短路题.一开始连最短路都没想到,可能是做的题太少了吧,完全没有思路. 题目大意: FJ的农场周围分布着N根电话线杆,任意两根电话线杆间都没有电话线相连.一共P对电话线杆间可以拉电话线,第i ...

  2. USACO翻译:USACO 2012 JAN三题(2)

    USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...

  3. USACO翻译:USACO 2012 JAN三题(1)

    USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery c ...

  4. USACO翻译:USACO 2013 JAN三题(1)

    USACO 2013 JAN 一.题目概览 中文题目名称 镜子 栅栏油漆 奶牛排队 英文题目名称 mirrors paint lineup 可执行文件名 mirrors paint lineup 输入 ...

  5. USACO翻译:USACO 2014 JAN三题(2)

    USACO 2014 JAN 一.题目概览 中文题目名称 队伍平衡 滑雪录像 滑雪场建设 英文题目名称 bteams recording skicourse 可执行文件名 bteams recordi ...

  6. USACO翻译:USACO 2014 JAN三题(1)

    USACO 2014 JAN 一.题目概览 中文题目名称 滑雪场设计 滑雪降速 滑雪场评级 英文题目名称 skidesign slowdown skilevel 可执行文件名 skidesign sl ...

  7. Usaco 2019 Jan Platinum

    Usaco 2019 Jan Platinum 要不是昨天老师给我们考了这套题,我都不知道usaco还有铂金这么一级. 插播一则新闻:杨神坚持认为铂金比黄金简单,原因竟是:铜 汞 银 铂 金(金属活动 ...

  8. [USACO 2018 Jan Gold] Tutorial

    Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 ...

  9. 【题解】晋升者计数 Promotion Counting [USACO 17 JAN] [P3605]

    [题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描 ...

  10. NC24017 [USACO 2016 Jan S]Angry Cows

    NC24017 [USACO 2016 Jan S]Angry Cows 题目 题目描述 Bessie the cow has designed what she thinks will be the ...

随机推荐

  1. 03-MySQL字段的数据类型

    前言 MySQL 中的字段,主要有四种数据类型: 整型(整数) 小数 字符串类型 时间日期类型 下面来详细讲一讲. 整数类型 整数类型的分类 MySQL中,整型有五种: 迷你整型:tinyint,使用 ...

  2. Python学习之十五_不同类型数据库表内容比较

    Python学习只十五_不同类型数据库表内容比较 前言 最近学习力总结了很多Python相关的内容 本次想继续学习一下不同数据库之间的数据比较. 这样理论上可以极大的缩减不同数据库测试成本. 感谢Py ...

  3. [转帖]全表扫描却产生大量db file sequential read一例

    老熊 Oracle性能优化 2012-05-23 开发人员在进行新系统上线前的数据校验测试时,发现一条手工执行的SQL执行了超过1小时还没有返回结果.SQL很简单: SELECT * FROM MOB ...

  4. [转帖]Linux的tmpfs和ramfs

    tmpfs tmpfs是一种虚拟内存文件系统, 它的存储空间在VM里面,现在大多数操作系统都采用了虚拟内存管理机制, VM(Virtual Memory) 是由Linux内核里面的VM子系统管理. V ...

  5. [转帖]kafka搭建kraft集群模式

    kafka2.8之后不适用zookeeper进行leader选举,使用自己的controller进行选举 1.准备工作 准备三台服务器 192.168.3.110 192.168.3.111 192. ...

  6. ContextSwitch 学习与使用

    ContextSwitch 学习与使用 说明 github上面有一个简单的测试系统调用以及上下文切换的工具. contextswitch. 下载之后直接make就可以进行简单的测试 需要注意的是 部分 ...

  7. Core 文件的简单学习

    背景 最近公司内经常出现jvm进程宕机的情况. 宕机之后没有产生jvm的dump文件.比如xxx.hprof 但是产生了 core.$pid的文件. 曾经在aarch64架构上宕机时曾经想学习一下co ...

  8. 源码阅读:VictoriaMetrics中的golang代码优化方法

    全文请移步:https://zhuanlan.zhihu.com/p/469239020 或关注我的公众号: 公众号:一本正经的瞎扯

  9. 【JS 逆向百例】当乐网登录接口参数逆向

    声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:当乐网登录 主页:https://oauth.d.cn ...

  10. [置顶] ES篇

    环境 第一篇: ES--介绍.安装 第二篇: ES--安装nodejs 第三篇: ES--插件 第四篇: ES--kibana介绍.安装 第五篇: ES--中文分词介绍.下载 第六篇: docker, ...