NC24949 [USACO 2008 Jan S]Running
题目
题目描述
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\) 跑的最远距离。有转移方程:
\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,休息/跑步)的最远距离。转移方程为:
\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的更多相关文章
- [USACO 2008 Jan. Silver]架设电话线 —— 最短路+二分
一道图论的最短路题.一开始连最短路都没想到,可能是做的题太少了吧,完全没有思路. 题目大意: FJ的农场周围分布着N根电话线杆,任意两根电话线杆间都没有电话线相连.一共P对电话线杆间可以拉电话线,第i ...
- USACO翻译:USACO 2012 JAN三题(2)
USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...
- USACO翻译:USACO 2012 JAN三题(1)
USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery c ...
- USACO翻译:USACO 2013 JAN三题(1)
USACO 2013 JAN 一.题目概览 中文题目名称 镜子 栅栏油漆 奶牛排队 英文题目名称 mirrors paint lineup 可执行文件名 mirrors paint lineup 输入 ...
- USACO翻译:USACO 2014 JAN三题(2)
USACO 2014 JAN 一.题目概览 中文题目名称 队伍平衡 滑雪录像 滑雪场建设 英文题目名称 bteams recording skicourse 可执行文件名 bteams recordi ...
- USACO翻译:USACO 2014 JAN三题(1)
USACO 2014 JAN 一.题目概览 中文题目名称 滑雪场设计 滑雪降速 滑雪场评级 英文题目名称 skidesign slowdown skilevel 可执行文件名 skidesign sl ...
- Usaco 2019 Jan Platinum
Usaco 2019 Jan Platinum 要不是昨天老师给我们考了这套题,我都不知道usaco还有铂金这么一级. 插播一则新闻:杨神坚持认为铂金比黄金简单,原因竟是:铜 汞 银 铂 金(金属活动 ...
- [USACO 2018 Jan Gold] Tutorial
Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 ...
- 【题解】晋升者计数 Promotion Counting [USACO 17 JAN] [P3605]
[题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描 ...
- 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 ...
随机推荐
- APB Slave状态机设计
`timescale 1ns/1ps `define DATAWIDTH 32 `define ADDRWIDTH 8 `define IDLE 2'b00 `define W_ENABLE 2'b0 ...
- Oracle实例的启动和关闭
启动模式 1.NoMount 模式(启动实例不加载数据库) 命令:startup nomount 讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打 ...
- 极简版本Clickhouse监控步骤
极简版本Clickhouse监控步骤 背景 昨天处理了 鲲鹏920 上面的Clickhouse 的基于Docker的安装与部署 今天想着能够继续处理一下 增加监控信息 能够实现对clickhouse使 ...
- [转帖]1. awk基础,awk介绍,awk基本语法,直接使用action,打印列,初识列和行,\$0、\$NF、NF,基础示例,begin模式,end模式
文章目录 前言 awk介绍 awk基本语法 直接使用action 打印列 初识列和行 \$0.\$NF.NF 基础示例 初识模式(begin end) 总结 友情链接 前言 本小节是awk基础入门课程 ...
- [转帖]Jmeter学习笔记(十一)——定时器
https://www.cnblogs.com/pachongshangdexuebi/p/11571524.html 默认情况下,Jmeter线程在发送请求之间没有间歇.不设置定时器,短时间内会产生 ...
- [转帖]linux性能优化-内存回收
linux文件页.脏页.匿名页 缓存和缓冲区,就属于可回收内存.它们在内存管理中,通常被叫做文件页(File-backed Page). 通过内存映射获取的文件映射页,也是一种常见的文件页.它也可以被 ...
- [转帖]linux 查看CPU 内存的信息
https://bbs.huaweicloud.com/blogs/302929 [摘要] ECS信息规格:2vCPUs | 4GiB | kc1.large.2镜像:openEuler 20.0 ...
- [转帖]Java 平台调试体系
https://www.cnblogs.com/xiaojiesir/p/15652619.html Java 平台调试体系(Java Platform Debugger Architecture,J ...
- 30岁程序媛求职路复盘:文转码+失业半年+PHP如何涨薪5K!?
这篇文章来自一位群友的分享: 这篇文章写于下班路上,刚刚入职不久,我想再冲刺一下大厂,阳哥建议我坚持总结打卡,可以尝试写写博客. 那我就从这篇开始吧,希望开个好头! 上班的感觉真好 今天是入职的第二周 ...
- 浅谈基于Web的跨平台桌面应用开发
作者:京东物流 王泽知 近些年来,跨平台跨端一直是比较热门的话题,Write once, run anywhere,一直是我们开发者所期望的,跨平台方案的优势十分明显,对于开发者而言,可以做到一次开发 ...