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 ...
随机推荐
- 基于VLC的视频播放器(转载)
最近在研究视频播放的功能,之前是使用VideoView.在网上看了一下,感觉不是很好,支持的格式比较少,现在网络视频的格式各种各样,感觉用VideoView播放起来局限性很大. 找到了一个比较合适的播 ...
- 一年成为emacs高手
http://blog.csdn.net/redguardtoo/article/details/7222501
- 平板上的js和电脑上js的不同之处
一.事件 1.平板上没有:onmousedown,onmouseup,onmousemove等事件,由ontouchstart,ontouchmove,ontounchend替代 2.位置问题:平板上 ...
- 转 Microsoft's Objective-C tech started on BlackBerryOS, Tizen
今天看到了这个 Microsoft's Objective-C tech started on BlackBerryOS, Tizen 见原文 http://www.osnews.com/story ...
- IT行业果真跳槽快吗?
近年来IT行业越来越火爆,许多人也开始炒,月入万元不是梦,随随便便拿高薪之类的文章层出不穷,许多的青少年甚至中年人开始关注这块,许多人选择去学习it行业,也朝着月入万元的目标前进,然而,曾几何时,月入 ...
- Javascript中DOM的练习
第一个题:html计时器 方法一: <body onLoad="show()" > <div id="b"></div> & ...
- C# 解析 Json数据
JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在 ...
- [原创]Matlab生成随机数
Matlab中有着丰富的随机数生成函数以应用于不同的情景,我一般使用生成随机的1~N的整数,但是之前了解的只有rand函数,其生成主要为0~1之间的随机数,但是和所预想的有差异.在此进行进行了help ...
- XAF进修二:在XAF中打开自定义的WinForm
在建造WinForm时须要加上一机关函数和Show办法 using System; using System.Collections.Generic; using System.ComponentMo ...
- linux下添加链接与删除链接(ln命令的用法)
添加链接使用ln命令用法:#ln --help用法:ln [选项]... 目标 [链接名]或:ln [选项]... 目标... 目录或:ln [选项]... --target-directory=目录 ...