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 ...
随机推荐
- JAVA错误:Exception in thread "main" java.lang.NullPointerException
JAVA错误:Exception in thread "main" java.lang.NullPointerException例如: Exception in thread &q ...
- bzoj1007题解
[题意分析] 给你n个上半平面,求包含这些上半平面的交的上半平面. [解题思路] 按斜率排序,用单调栈维护一个下凸壳即可.复杂度O(nlog2n). [参考代码] #include <cctyp ...
- 强大的pdf文件操作小工具——PDFtk的小白用法 【转载】
转载出处https://www.cnblogs.com/basterdaidai/p/6204518.html 前言 作为程序员,大家都知道的,总是会被技术小白问各种跟编程没什么关系的硬件.软件问题. ...
- NX二次开发-C++time函数计时
NX11+VS2013 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> #include <t ...
- FZU - 2295 Human life:网络流-最大权闭合子图-二进制优化-第九届福建省大学生程序设计竞赛
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 http://acm.fzu.edu.cn/problem.php?pid=2295 htt ...
- HDU3342:判断有向图中是否存在3元环-Tarjan或拓扑排序
题目大意: 给你一个关系图,判断是否合法.每个人都有师父和徒弟,可以有很多个: 若A是B的师父,B是C的师父,则A也算C的师父. 不合法: 1) . 互为师徒:(有回路) 2) .你的师父是你徒弟 ...
- centos7.4安装kubernetes1.6.0(开启TLS认证)
目录 目录 前言 集群详情 环境说明 安装前准备 提醒 一.创建TLS证书和秘钥 安装CFSSL 创建 CA (Certificate Authority) 创建 CA 配置文件 创建 CA 证书签名 ...
- Apache Shiro RememberMe 1.2.4 反序列化漏洞
拉取镜像 docker pull medicean/vulapps:s_shiro_1 启动环境 docker run -d -p 80:8080 medicean/vulapps:s_shiro_1 ...
- bagging和boosting以及rand-forest
bagging: 让该学习算法训练多轮,每轮的训练集由从初始的训练集中随机取出的n个训练样本组成,某个初始训练样本在某轮训练集中可以出现多次或根本不出现,训练之后可得到一个预测函数序列h_1,⋯ ⋯h ...
- 使用nginx访问本地电脑的目录文件
cat /usr/local/opt/nginx/ //nginx路径 cd /usr/local/opt/nginx/html //localhost的指向 ln -s ~/Documents do ...