BZOJ1742[Usaco2005 nov]Grazing on the Run
Description
Input
Output
* Line 1: A single integer: the minimum total staleness Bessie can achieve while eating all the clumps.
Sample Input
1
9
11
19
INPUT DETAILS:
Four clumps: at 1, 9, 11, and 19. Bessie starts at location 10.
Sample Output
OUTPUT DETAILS:
Bessie can follow this route:
* start at position 10 at time 0
* move to position 9, arriving at time 1
* move to position 11, arriving at time 3
* move to position 19, arriving at time 11
* move to position 1, arriving at time 29
giving her a total staleness of 1+3+11+29 = 44. There are other routes
with the same total staleness, but no route with a smaller one.44
f[i][j][0]=min(f[i+1][j][0]+(a[i+1]-a[i])*(n-j+i),f[i+1][j][1]+(a[j]-a[i])*(n-j+i));
f[i][j][1]=min(f[i][j-1][0]+(a[j]-a[i])*(n-j+i),f[i][j-1][1]+(a[j]-a[j-1])*(n-j+i));
首先我们先看第一个式子 f[i][j][0]=min(f[i+1][j][0]+(a[i+1]-a[i])*(n-j+i),f[i+1][j][1]+(a[j]-a[i])*(n-j+i));
f[i][j][0]表示牛吃完区间i到j,并停在i草地所得的腐烂值,那说明i草地是这块区间内最后被吃的,即在这之前i+1到j块草地已经被吃过了,且牛停在i+1块草地或是j块草地上,
当它之前停在i+1块草地上时,即之前的腐烂值为f[i+1][j][0]时,我们只需在之前的腐烂值上,加上第i+1块草地到第i块草地,所会带来的总腐烂值,就是现在的答案啦。
那么什么是所会带来的总腐烂值呢?当牛从i+1到i时,所需经过的路程为a[i+1]-a[i],即之后吃的每块草地都需加上这个腐烂值,总共有n-j+i(这个值是把牛最初的位置也当成一块草地的前提下推出来的,就是n-(j-i))块草地未被吃,所以之后总共要增加的腐烂值为(a[i+1]-a[i])*(n-j+i),总腐烂值就是f[i+1][j][0]+(a[i+1]-a[i])*(n-j+i),我们再把它和牛之前停在第j块草地上所需增加的腐烂值进行比较,取较小的就是f[i][j][0]的值。
第二个式子也是差不多的,可以自己去推一下。
还有一点,让我错了5次,就是一开始f[i][i][0]和f[i][i][1]是不能全部都算作无限大的,而应该赋值为它与牛初始位置之差并乘上n,即一开始就只吃那块草地所会为其他草地带去的腐烂值。
记得排序!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int n,l,j,a[],f[][][];
int main()
{
cin>>n>>l;
for (int i=;i<=n;i++) cin>>a[i];
a[n+]=l;
n+=;
sort(a+,a++n);
for (int i=;i<=n;i++)
f[i][i][]=f[i][i][]=abs(a[i]-l)*n;//这里的初始化一定要小心!
for (int len=;len<=n;len++)
for (int i=;i<=n-len+;i++)
{
j=i+len-;
f[i][j][]=min(f[i+][j][]+(a[i+]-a[i])*(n-j+i),f[i+][j][]+(a[j]-a[i])*(n-j+i));//吃完i到j这个区间并停在i所获的最小腐烂值
f[i][j][]=min(f[i][j-][]+(a[j]-a[i])*(n-j+i),f[i][j-][]+(a[j]-a[j-])*(n-j+i));//这个是停在j的
//奇怪的方程。。。在前面写过意思了
}
cout<<min(f[][n][],f[][n][])<<endl;//输出最优解。
return ;
}
BZOJ1742[Usaco2005 nov]Grazing on the Run的更多相关文章
- bzoj1742[Usaco2005 nov]Grazing on the Run 边跑边吃草*&&bzoj3074[Usaco2013 Mar]The Cow Run*
bzoj1742[Usaco2005 nov]Grazing on the Run 边跑边吃草 bzoj3074[Usaco2013 Mar]The Cow Run 题意: 数轴上有n棵草,牛初始在L ...
- BZOJ1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草
数轴上n<=1000个点,从p出发以任意顺序走到所有的点,求到达每个点的时间之和的最小值. 好题!看起来水水的实际易错! 显然的结论是经过一个区间点之后肯定落在左端点或右端点上,谁没事最后还往中 ...
- BZOJ 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草( dp )
dp... dp( l , r , k ) , 表示 吃了[ l , r ] 的草 , k = 1 表示最后在 r 处 , k = 0 表示最后在 l 处 . ------------------- ...
- [Usaco2005 nov]Grazing on the Run 边跑边吃草 BZOJ1742
分析: 首先,连续选择一段必定最优... 区间DP,f[i][j]表示从i开始,连续j个被吃掉了,并且,牛在i处,g[i][j]则表示在i+j-1处 f[i][j]可以从g[i+1][j]和f[i+1 ...
- 【bzoj1742】[Usaco2005 nov]Grazing on the Run 边跑边吃草 区间dp
题目描述 John养了一只叫Joseph的奶牛.一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草.我们可以认为草地是一个数轴上的一些点.Joseph看到这些草非常兴奋,它想把它们全部吃 ...
- [USACO2005 nov] Grazing on the Run【区间Dp】
Online Judge:bzoj1742,bzoj1694 Label:区间Dp 题目描述 John养了一只叫Joseph的奶牛.一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草.我 ...
- bzoj 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草【区间dp】
挺好的区间dp,状态设计很好玩 一开始按套路设f[i][j],g[i][j]为吃完(i,j)区间站在i/j的最小腐败值,后来发现这样并不能保证最优 实际上是设f[i][j],g[i][j]为从i开始吃 ...
- BZOJ2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 56 Solved: 16[S ...
- 1741: [Usaco2005 nov]Asteroids 穿越小行星群
1741: [Usaco2005 nov]Asteroids 穿越小行星群 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 231 Solved: 166 ...
随机推荐
- [转]配置sonar、jenkins进行持续审查
本文以CentOS操作系统为例介绍Sonar的安装配置,以及如何与Jenkins进行集成,通过pmd-cpd.checkstyle.findbugs等工具对代码进行持续审查. 一.安装配置sonar ...
- ORM即 对象-关系映射(转自:微冷的雨)
ORM即 对象-关系映射: 将数据库中的数据关系表,映射为实体对象. 灵动思绪EF(Entity FrameWork) 作者: 微冷的雨 来源: 博客园 发布时间: 2013-01-22 16:2 ...
- BZOJ1801:[Ahoi2009]chess 中国象棋
Time Limit: 10 Sec Memory Limit: 64 MB Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置 ...
- Chrome浏览器Network面板http请求时间分析
Chrome浏览器开发者工具Network窗口下,可以查看下载各组件所需的具体时间 根据上表进行简要分析-- Stalled(阻塞) 浏览器对同一个主机域名的并发连接数有限制,因此如果当前的连接数已经 ...
- Android_AsyncTask异步任务机制
今天我们学习了 AsyncTack, 这是一个异步任务. 那么这个异步任务可以干什么呢? 因为只有UI线程,即主线程可以对控件进行更新操作.好处是保证UI稳定性,避免多线程对UI同时操作. 同时要把耗 ...
- 详解APM数据采样与端到端
高驰涛 云智慧首席架构师 据云智慧统计,APM从客户端采集的性能数据可能占到业务数据的50%,而企业要做到从Request到Response整个链路中涉及到的所有数据的准确采集,并进行有效串接,进而实 ...
- IT行业果真跳槽快吗?
近年来IT行业越来越火爆,许多人也开始炒,月入万元不是梦,随随便便拿高薪之类的文章层出不穷,许多的青少年甚至中年人开始关注这块,许多人选择去学习it行业,也朝着月入万元的目标前进,然而,曾几何时,月入 ...
- win10家庭版快速升级专业版
win10家庭普通版升级专业版方法: 1.点击“开始”,选择控制面板. 2.点击“系统与安全”,选择“Windows Anytime Upgrade”.(或者:单击「开始」按钮,在搜索框中,键入any ...
- ZooKeeper概述(转)
译自http://zookeeper.apache.org/doc/trunk/zookeeperOver.html ZooKeeper是一个用于分布式应用的开源分布式协调服务.它提供了简单的原语集合 ...
- Android资源文件简介
Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, 资源 ...