[USACO10OPEN]牛跳房子Cow Hopscotch
题目描述
奶牛们正在回味童年,玩一个类似跳格子的游戏,在这个游戏里,奶
牛们在草地上画了一行N个格子,(3 <=N <= 250,000),编号为1..N。
就像任何一个好游戏一样,这样的跳格子游戏也有奖励!第i个格子标有一个数字V_i(-2,000,000,000 <=V_i <= 2,000,000,000)表示这个格子的钱。奶牛们想看看最后谁能得到最多的钱。
规则很简单:
* 每个奶牛从0号格子出发。(0号格子在1号之前,那里没钱)
* 她向N号格子进行一系列的跳跃(也可以不跳),每次她跳到的格子最多可以和前一个落脚的格子差K格(2 <= K <= N)(比方说,当前在1号格,K=2, 可以跳到2号和3号格子)
*在任何时候,她都可以选择回头往0号格子跳,直到跳到0号格子。另外,除了以上规则之外,
回头跳的时候还有两条规则:
*不可以跳到之前停留的格子。
*除了0号格子之外,她在回来的时候,停留的格子必须是恰巧过去的时候停留的某个格子的前一格(当然,也可以跳过某些过去…
(必须最后要跳回来)
题解:
往回跳是一个挺麻烦的事情。
发现,如果不是一下回到0的话,一定会在某一个位置i的前一个位置作为回来的停留
因为不能记录来的路上哪些点没有走过,
所以我们还可以过去的时候,就把回来的路径上的点贡献统计上。
似乎只能dp了、
由于有负数,所以不是停留的格子越多越好。
为了避免选择i的前一个格子是否要停留,
我们设f[i],表示,从0跳到i,往后再跳一些(距离i不能超过k-1),然后返回到i-1,然后再回到0的最优收益。
就是说,我们钦定i-1是返回的路径上第一个回来的点。
而且,我们每跳k个距离,就必须留下一个点作为回来的点。
那么,f[i]=max(f[j]+s[i-2]-s[j]+v[i]+v[i-1]) (i-k<=j<=i-2)就是从j一步跳到i
s[k]表示,前k个位置,大于0的数的前缀和。因为不超过k距离下,随便收钱必然找正数 。
j的范围很经典了,简单又自然地,单调队列优化一下f就可以
统计答案的时候,并不是mx(f[i])
因为i还可以往后捞点钱,再回到i-1,所以,f[i]再加上s[min(i+k-1,n)]-s[i]
然后一个锅就是:
我们的讨论有一个大前提。"如果不是一下回到0的话,一定会在某一个位置i的前一个位置作为回来的停留"
那么如果最优解是跳过去,然后一步回到0,就挂了。
所以,f[0]=s[min(0+k),n]也要取进ans的mx里。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=(1LL*<<);
const int N=+;
int n,k;
ll f[N];
ll v[N],s[N];
int q[N],l,r;
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++){
scanf("%lld",&v[i]);
s[i]=s[i-]+(v[i]>)*v[i];
}
l=,r=;
f[]=v[];
q[++r]=;
for(int i=;i<=n;i++){
while(l<=r&&q[l]<i-k) l++;
f[i]=f[q[l]]-s[q[l]]+v[i]+v[i-]+s[i-];
while(l<=r&&(f[q[r]]-s[q[r]])<=(f[i-]-s[i-])) r--;
q[++r]=i-;
}
ll ans=;
for(int i=;i<=n;i++) ans=max(ans,f[i]+s[min(n,i+k-)]-s[i]);
ans=max(ans,f[]+s[min(n,k)]-s[]);
printf("%lld",ans);
return ;
}
总结:
像这种题,确实看起来无从下手,主要是回来的路径怎么考虑上?
但是利用回来的路径必须是i的前面一个位置,所以,可以钦定回来的位置,然后就可以dp了。
注意边界的细节问题。
[USACO10OPEN]牛跳房子Cow Hopscotch的更多相关文章
- 【洛谷】2990:[USACO10OPEN]牛跳房子Cow Hopscotch【单调队列优化DP】
P2990 [USACO10OPEN]牛跳房子Cow Hopscotch 题目描述 The cows have reverted to their childhood and are playing ...
- 洛谷 P3120 [USACO15FEB]牛跳房子(金)Cow Hopscotch (Gold)
P3120 [USACO15FEB]牛跳房子(金)Cow Hopscotch (Gold) 就像人类喜欢跳格子游戏一样,FJ的奶牛们发明了一种新的跳格子游戏.虽然这种接近一吨的笨拙的动物玩跳格子游戏几 ...
- Cow Hopscotch
Cow Hopscotch 题目描述 Just like humans enjoy playing the game of Hopscotch, Farmer John's cows have inv ...
- bzoj3939 【USACO 2015 FEB GOLD 】cow hopscotch
Description 就像人类喜欢玩"跳房子"的游戏,农民约翰的奶牛已经发明了该游戏的一个变种自己玩.由于笨拙的动物体重近一吨打,牛跳房子几乎总是以灾难告终,但这是没有阻止奶牛几 ...
- P2877 [USACO07JAN]牛校Cow School(01分数规划+决策单调性分治)
P2877 [USACO07JAN]牛校Cow School 01分数规划是啥(转) 决策单调性分治,可以解决(不限于)一些你知道要用斜率优化却不会写的问题 怎么证明?可以暴力打表 我们用$ask(l ...
- bzoj1638 / P2883 [USACO07MAR]牛交通Cow Traffic
P2883 [USACO07MAR]牛交通Cow Traffic 对于每一条边$(u,v)$ 设入度为0的点到$u$有$f[u]$种走法 点$n$到$v$(通过反向边)有$f2[v]$种走法 显然经过 ...
- bzoj1650 / P2855 [USACO06DEC]河跳房子River Hopscotch / P2678 (noip2015)跳石头
P2855 [USACO06DEC]河跳房子River Hopscotch 二分+贪心 每次二分最小长度,蓝后检查需要去掉的石子数是否超过限制. #include<iostream> #i ...
- P3014 [USACO11FEB]牛线Cow Line && 康托展开
康托展开 康托展开为全排列到一个自然数的映射, 空间压缩效率很高. 简单来说, 康托展开就是一个全排列在所有此序列全排列字典序中的第 \(k\) 大, 这个 \(k\) 即是次全排列的康托展开. 康托 ...
- 【BZOJ3939】[Usaco2015 Feb]Cow Hopscotch 动态规划+线段树
[BZOJ3939][Usaco2015 Feb]Cow Hopscotch Description Just like humans enjoy playing the game of Hopsco ...
随机推荐
- django1.11入门
快速安装指南¶ 在使用Django之前,您需要安装它.我们有 完整的安装指南,涵盖所有可能性; 本指南将指导您进行简单,最小化的安装,在您完成介绍时可以正常工作. 安装Python¶ 作为一个Pyth ...
- linux下自己安装软件做成命令
安装nodejs,从官网下下来的是一个压缩包,解压下里面有可执行文件.教程上用ln -s [可执行文件的绝对路径] [/usr/local/bin/]建了一个软连接,这样就能直接无视路径,用命令行调用 ...
- Python常用模块之PIL(手册篇:Image模块)
官方手册地址:http://effbot.org/imagingbook/image.htm Image模块 图像模块提供了一个具有相同名称的类,用于表示一个PIL的图像.该模块还提供了许多功能,包 ...
- Nginx 配置优化
一.开启Gzip 1.参数 gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_comp_level 2;gzip_types text/plain ...
- jQuery获取复选框选中的每一个值
$('input[name="serviceMode"]:checked').each(function(){ this.attr('value') });
- Daily Scrum (2015/11/2)
今日我们完成了博客作业的发布,并且也完成了服务器的配置. 成员 今日工作 时间 明日工作 符美潇 两篇文档的修善和数据库的搭建. 2h 完成数据库搭建,并能爬取数据提供给第二小组使用 潘礼鹏 编写两篇 ...
- [buaa-SE-2017]个人作业-期末总结
个人作业-期末总结 Part1: 阅读作业 在这一部分,首先我将说说我对这次阅读作业中每篇文章的理解,最后结合这次团队项目的经理谈谈自己对软件开发的看法. 1. No Silver Bullet 文章 ...
- POJ 1185 炮兵阵地 状压dp
题目链接: http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K 问题描述 司令部的将军们打算在N*M ...
- Codeforces Round #304 (Div. 2) E. Soldier and Traveling 最大流
题目链接: http://codeforces.com/problemset/problem/546/E E. Soldier and Traveling time limit per test1 s ...
- 0523 Scrum项目6.0
0523 团队项目6.0 一,组员任务完成情况 首页设计初步完成但是需要优化界面,只能简单的输出信息和在首页进行登录.界面极其简单.使用了Javabean的设计模式,进行改进,使得页面的里的代码看起来 ...