USACO 2009 Open Grazing2 /// DP+滚动数组oj26223
题目大意:
输入n,s;n头牛 s个栅栏
输入n头牛的初始位置
改变他们的位置,满足
1.第一头与最后一头的距离尽量大
2.相邻两头牛之间的距离尽量满足 d=(s-1)/(n-1),偏差不超过1
3.移动的总步数尽量小
https://blog.csdn.net/BlackJack_/article/details/73527208
首先因需要尽量满足d
1.若整除则全部为d即可
2.若不整除则说明存在偏差,则有些距离 d 有些距离 d+1 即可
除了第一头牛移到1 最后一头牛移到s之外
其余第 i 头牛最佳位置应为 d*(i-1)
若到目前为止位置偏差值为 j ,则应为 d*(i-1)+ j
则这头牛应该移动 | a[ i ]-(d*(i-1)+j)| 即 abs( a[ i ] - ( i-1 ) * d - j )
那么可由min( dp[ i-1 ][ j ],dp[ i-1 ][ j-1 ] )转移而来
前者是 i-1 与 i 距离 d 的情况,而后者是 i-1 与 i 距离 d+1 的情况
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int a[], dp[][]; // 滚动数组
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)) {
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
sort(a+,a++n);
int d=(m-)/(n-);// 最佳间距
m=m-(n-)*d;// 总偏差间距+1 (方便推算)
memset(dp,INF,sizeof(dp));
/// dp[i][j] 表到第i个时偏差为j的移动次数
dp[][]=a[]-;// 偏差从1开始 则m对应的恰好为总偏差间距
for(int k=;k<=n;k++) {
int i=k%;
for(int j=;j<=k&&j<=m;j++)
dp[i][j]=min(dp[(!i)][j-],dp[(!i)][j])
+abs(a[k]-(k-)*d-j);
}
printf("%d\n",dp[n%][m]);
} return ;
}
USACO 2009 Open Grazing2 /// DP+滚动数组oj26223的更多相关文章
- HDU 1024 Max Sum Plus Plus --- dp+滚动数组
HDU 1024 题目大意:给定m和n以及n个数,求n个数的m个连续子系列的最大值,要求子序列不想交. 解题思路:<1>动态规划,定义状态dp[i][j]表示序列前j个数的i段子序列的值, ...
- POJ 3666 Making the Grade (DP滚动数组)
题意:农夫约翰想修一条尽量平缓的路,路的每一段海拔是A[i],修理后是B[i],花费|A[i] – B[i]|,求最小花费.(数据有问题,代码只是单调递增的情况) #include <stdio ...
- HDU 5119 Happy Matt Friends (背包DP + 滚动数组)
题目链接:HDU 5119 Problem Description Matt has N friends. They are playing a game together. Each of Matt ...
- BZOJ-1925 地精部落 烧脑DP+滚动数组
1925: [Sdoi2010]地精部落 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1053 Solved: 633 [Submit][Status ...
- Codeforces 712 D. Memory and Scores (DP+滚动数组+前缀和优化)
题目链接:http://codeforces.com/contest/712/problem/D A初始有一个分数a,B初始有一个分数b,有t轮比赛,每次比赛都可以取[-k, k]之间的数,问你最后A ...
- hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)
题目 以前做过的一道题, 今天又加了一种方法 整理了一下..... 题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符. 方法一: 将该字符串与其反转求一次LCS,然后所求就是n减去 ...
- 【BZOJ】1925: [Sdoi2010]地精部落 DP+滚动数组
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1925 题意:输入一个数N(1 <= N <= 4200),问将这些数排列成折线 ...
- tyvj P1519 博彩游戏(AC自动机+DP滚动数组)
P1519 博彩游戏 背景 Bob最近迷上了一个博彩游戏…… 描述 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到一个随机序列:有M个序列,如果某个序列是产生的随机序列的 ...
- poj1159 dp(滚动数组优化)
H - 简单dp 例题扩展 Crawling in process... Crawling failed Time Limit:3000MS Memory Limit:65536KB ...
随机推荐
- kafka拦截器原理|案例实操
拦截器原理 Producer拦截器(interceptor)是在Kafka 0.10版本被引入的,主要用于实现clients端的定制化控制逻辑. 对于producer而言,interceptor使得用 ...
- Cstring转char、string、int等数据类型的方法(转载)
Cstring转char.string.int等数据类型的方法 (-- ::) 转载 标签: 杂谈 分类: VC CString 转char * CString cstr; char *p = (LP ...
- Android Canvas save和restoreToCount
@Override public void draw(Canvas canvas) { if (mDrawable!=null) { int sc=canvas.save(); if (mAnimat ...
- 1.RabbitMQ介绍
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的是程序之间 ...
- Python 利用微信端口查看列车时刻表
import requests """ 该程序查看列车时刻 """ url0 = 'http://www.webxml.com.cn/Web ...
- 微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateLibraryById
ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateLibraryById 1.返回顶部 1. templateMessage.getTem ...
- LightOJ-1253-Misere Nim-nim博弈
Alice and Bob are playing game of Misère Nim. Misère Nim is a game playing on k piles of stones, eac ...
- 20140320 roc曲线 sizeof
1.roc曲线 http://www.zhizhihu.com/html/y2012/4076.html 2.using namespace std的缺点:程序中定义一个变量cout会被误认为是std ...
- org.apache.jasper.JasperException: Unable to compile class for JSP: Invalid character constant
这里不能用单引号,只能为双引号 request.setCharacterEncoding('gb2312'); String user = request.getParameter(" ...
- luaj使用 方法签名规则 Cocos2dxLuaJavaBridge
function AndroidHandler:getParamJson() local args = {nil} local ok,ret = luaj.callStaticMeth ...