题目描述

John养了一只叫Joseph的奶牛。一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草。我们可以认为草地是一个数轴上的一些点。Joseph看到这些草非常兴奋,它想把它们全部吃光。于是它开始左右行走,吃草。John和Joseph开始的时候站在p位置。Joseph的移动速度是一个单位时间一个单位距离。不幸的是,草如果长时间不吃,就会腐败。我们定义一堆草的腐败值是从Joseph开始吃草到吃到这堆草的总时间。Joseph可不想吃太腐败的草,它请John帮它安排一个路线,使得它吃完所有的草后,总腐败值最小。John的数学很烂,她不知道该怎样
做,你能帮她么?

输入

* Line 1 : Two space-separated integers: N and L. N<=1000
* Lines 2..N+1: Each line contains a single integer giving the position P of a clump (1 <= P <= 1,000,000).

输出

* Line 1: A single integer: the minimum total staleness Bessie can achieve while eating all the clumps.

样例输入

4 10
1
9
11
19

样例输出

44


题解

区间dp,膜拜popoqqq

因为路过的草一定吃,所以吃的草一定是一段区间。

用f[i][k]表示吃完从i开始连续的k堆草,且此时在左侧的最小腐败值,

用g[i][k]表示吃完从i开始连续的k堆草,且此时在右侧的最小腐败值。

这样我们发现腐败值很难求,并且无法保证最优。

所以我们可以先计算出每段时间所有草增加的腐败值,这样既能保证dp的成立,又方便计算。

状态转移方程应该很容易由f/g[i/i+1][k-1]推出来。

由于空间限制,需要用到滚动数组黑科技。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
long long f[1001][2] , g[1001][2] , p[1001];
int main()
{int n , i , j , k , cl = 0 , cr = 0;long long m;scanf("%d%lld" , &n , &m);for(i = 1 ; i <= n ; i ++ )scanf("%lld" , &p[i]);sort(p + 1 , p + n + 1);for(i = 1 ; i <= n ; i ++ ){if(p[i] <= m)cl = i;if(!cr && p[i] > m)cr = i;}memset(f , 0x3f , sizeof(f));memset(g , 0x3f , sizeof(g));if(cl) f[cl][1] = g[cl][1] = n * (m - p[cl]);if(cr) f[cr][1] = g[cr][1] = n * (p[cr] - m);for(k = 2 ; k <= n ; k ++ ){for(i = 1 ; i + k - 1 <= n ; i ++ ){j = i + k - 1;f[i][k & 1] = min(f[i + 1][~k & 1] + (n - k + 1) * (p[i + 1] - p[i]) , g[i + 1][~k & 1] + (n - k + 1) * (p[j] - p[i]));g[i][k & 1] = min(g[i][~k & 1] + (n - k + 1) * (p[j] - p[j - 1]) , f[i][~k & 1] + (n - k + 1) * (p[j] - p[i]));}}printf("%lld\n" , min(f[1][n & 1] , g[1][n & 1]));return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/6396881.html

【bzoj1742】[Usaco2005 nov]Grazing on the Run 边跑边吃草 区间dp相关推荐

  1. bzoj 1694 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草(DP)

    1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 395  So ...

  2. [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 ...

  3. bzoj 1630 2023: [Usaco2005 Nov]Ant Counting 数蚂蚁(有重复元素的组合数)

    2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 281  Solved: 18 ...

  4. 2.16([Usaco2005 Nov]Ant Counting)

    描述 Bessie was poking around the ant hill one day watching the ants march to and fro while gathering ...

  5. vue2.x 在引用插件的时候,npm run dev跑正常 ,npm run build 报错vue-cli Unexpected token: punc (() [...

    这是因为,引用的插件在node_modules里,并不在vue-cli的es6编译范围内,所以语法报错,修改方法: 转载于:https://www.cnblogs.com/cynthia-wuqian ...

  6. BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )

    一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...

  7. Weex Project (npm run android)-Error: Error: Command failed

    问题描述: weex项目在运行npm run android跑安卓端时出现以下错误,尝试了网上的很多方法,包括Stack Overflow上的大神的建议依然没有解决,问题如下: Error: Erro ...

  8. mysql 5.7临时表空间_深度解析MySQL 5.7之临时表空间

    临时表 临时表顾名思义,就是临时的,用完销毁掉的表. 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上. 临时表有下面几种: 1.全局临时表 这种临时表从数据库实例启动后开始生效,在 ...

  9. 【系列5】使用Dockerfile创建带weblogic的Centos Docker镜像

    Weblogic是一个基于Java EE架构的中间件(应用服务器),WebLogic由Oracle公司维护. WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应用的J ...

最新文章

  1. Mock.js mysql_平台支持mock功能—未完成版
  2. linq 解决winForm中控件CheckedListBox操作的问题。(转载)
  3. 在WordPress文章中插入表格的四种方法,史上最全
  4. Flask wtforms
  5. 全球数据库--基金/管理产品--分类/行业平均
  6. JavaScript 中判断一个函数的 this 绑定
  7. PHP获取对象的hashcode_php 字符串转hashcode(包括中文)
  8. linux shell 命令批量杀死进程
  9. CVAL,PVAL,SVAL宏定义
  10. python古诗代码案例_用python实现古诗词横板竖版显示 【二维列表的使用】
  11. Dell服务器进入双系统按键,dell进bios按什么键 戴尔进bios的方法
  12. 对于Java黑皮书课后习题22.8的补充
  13. 量化投资策略与技术1:概念
  14. 用手机快速制作真人手办模型
  15. 安卓集成Google Play支付(谷歌支付)最新版本
  16. 阿里暑期实习二面3.28
  17. 《马上有招儿:PPT商务演示精选20讲(全彩) 》
  18. Github项目加速下载
  19. adb 查看磁盘占用_如何使用adb 指令查看机器序列号
  20. 苏宁闯入二手房市场,每套服务费仅9999元

热门文章

  1. 风格之争:Coroutine vs Callback
  2. 《Face alignment at 3000 FPS via Regressing Local Binary Features》阅读笔记
  3. 计算机未来的发展趋势三百字,数字媒体毕业论文5000字_大专毕业论文5000字_计算机类毕业论文5000字文库...
  4. imwrite函数 matlab_用matlab做一个脉动磁势分解的动画
  5. 自用_C/C++报错记录汇总
  6. 数据:Uniswap V3的24小时交易量已超过2亿美元
  7. SAP License:在产品结算参数设置
  8. SAP License:SAP ECC6安装系列四:安装过程详解
  9. 客户关系管理系统中实现对客户信息标记颜色的处理
  10. 微信小程序-腾讯地图显示偏差问题