动态规划:奶牛吃草问题
奶牛吃草
问题描述
在X轴上,用一个整树表示坐标。题目给定一个坐标表示奶牛起始位置,再给定一组坐标表示青草的位置,给出一个设定:每过一个单位时间,青草口感损失1个单位。
假定奶牛运行速度就是一个单位/单位时间,忽略奶牛吃草的时间,并且要求奶牛吃掉所有青草,问最小青草损失口感为多少。
输入格式
第一行两个用空格隔开的整数 n,k,分别表示青草的数目和奶牛的初始坐标。
第 2 行到第 n+1 行,第 i+1 行有一个整数 x[i],描述第 i 棵青草的坐标。
输出格式
一行一个整数,表示吃掉所有青草的前提下,最小损失的口感之和。保证答案在 32 位有符号整数的范围内。
样例输入
4 10
1
9
11
19
样例输出
44
样例解释
先跑到 9,然后跑到 11,再跑到 19,最后到 1,可以让损失的口感总和为 29+1+3+11=44。可以证明不存在比这更优的解。
代码实现
#include <bits/stdc++.h>
using namespace std;// ================= 代码实现开始 =================/* 请在这里设计你的算法 */
const int N = 2003;
int dp[N+2][N+2][2];// 本函数求解答案(损失的最小口感和)
// n:青草棵数
// k:奶牛的初始坐标
// x:描述序列 x(这里需要注意的是,由于 x 的下标从 1 开始,因此 x[0] 的值为 -1,你可以忽略它的值,只需知道我们从下标 1 开始存放有效信息即可),意义同题目描述
// 返回值:损失的最小口感和
int getAnswer(int n, int k, vector<int> x) {/* 请在这里设计你的算法 */sort(x.begin()+1, x.end());for(int i=1; i<=n; ++i)//只吃一棵草dp[i][i][0] = dp[i][i][1] = abs(x[i] - k) * n;for(int len=1; len<n; ++len){for(int L=1, R; (R=L+len)<=n; ++L){ //[L,R]表示已被吃掉的草的连续区间dp[L][R][0] = min(dp[L+1][R][0] + (n-(R-L)) * abs(x[L] - x[L+1]),//原本在左,继续向左吃dp[L+1][R][1] + (n-(R-L)) * abs(x[L] - x[R])); //原本在右,跑到左来吃dp[L][R][1] = min(dp[L][R-1][1] + (n-(R-L)) * abs(x[R] - x[R-1]),//原本在右,继续向右吃dp[L][R-1][0] + (n-(R-L)) * abs(x[R] - x[L])); //原本在左,跑到右来吃}}return min(dp[1][n][0], dp[1][n][1]);
}// ================= 代码实现结束 =================int main() {int n, k, tmp;vector<int> x;scanf("%d%d", &n, &k);x.clear();x.push_back(-1);for (int i = 1; i <= n; ++i) {scanf("%d", &tmp);x.push_back(tmp);}int ans = getAnswer(n, k, x);printf("%d\n", ans);return 0;
}
来源
来自邓俊辉老师的《算法训练营》第一期。
动态规划:奶牛吃草问题相关推荐
- 【bzoj1742】[Usaco2005 nov]Grazing on the Run 边跑边吃草 区间dp
题目描述 John养了一只叫Joseph的奶牛.一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草.我们可以认为草地是一个数轴上的一些点.Joseph看到这些草非常兴奋,它想把它们全部吃 ...
- 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 ...
- 18771:奶牛的草(multimap)
题目描述 奶牛是乳用品种的黄牛,经过高度选育繁殖的优良品种,我国的奶牛主要以黑白花奶牛为主.该品种适应性强.分布范围广.产奶量高.耐粗饲.奶牛比较喜欢吃草.现在就请你统计一下一头奶牛获得了哪些质量的草 ...
- 简单的博弈问题:牛羊吃草问题(递归解法-暴力解法)
给定一个正整数N,表示N份青草放在一个仓库里面,有一只牛和一只羊,牛先吃,他俩轮流进行吃草,不管是牛还是羊,每一轮吃的草量,必须是 1,4,16,64.... 谁先把草吃完,谁获胜: 假设:牛和羊都是 ...
- [USACO2020Dec铜组第三题]奶牛啃草(Stuck in a Rut)
题目描述 Farmer John 最近扩大了他的农场,从奶牛们的角度看来这个农场相当于是无限大了!奶牛们将农场上放牧的区域想作是一个由正方形方格组成的无限大二维方阵,每个方格中均有美味的草(将每个方格 ...
- 奥数之“牛吃草问题”C++实现
2019独角兽企业重金招聘Python工程师标准>>> 导读 最近在给小朋友补奥数课,顺便看了几道题目其中可以用"计算机算法"表示出来的.觉得写出来会比较集中,希 ...
- Python3之牛吃草问题
牛吃草: 已知: 20头牛,可以吃15天 14头牛,可以吃24天 问:28头牛可以吃几天? 或者 6头牛,可以吃3天 4头牛,可以吃5天 问:多少头牛可以吃15天? 需要知道哪些 固定牧场的大小(si ...
- 你给员工吃草,还指望他们有狼性?
转载来源:51CTO技术栈公众号 " Steve Jobs 说过:"工作将会占据你生命中大部分时间, 获得成就感的惟一途径就是做你自己认为是伟大的工作. " 然而现实是, ...
- 【开心一刻】又想让马儿跑,又不给马儿吃草!
点击上方"Java精选",选择"设为星标" 人活一世,做人做事,看透点,看淡点! 快乐是要学会分享,欢迎下方留言! 每天 08:35 更新不断,笑一笑,十年少. ...
最新文章
- [Java] SSH框架笔记_Struts2配置问题
- 数据中台到底包括什么内容?一文详解架构设计与组成
- poj-3667(线段树区间合并)
- PRML(1)--绪论(上)多项式曲线拟合、概率论
- python flask源码解析_Flask知识全套及源码分析
- java不能弹出打印窗口,java – 如何打印一个摆动窗口,使其非常适合一页
- Linux内核学习笔记(2)-- 父进程和子进程及它们的访问方法
- RN:app开发入门指南
- 远程办公软件华为云WeLink视频会议指南(下篇:记录会议纪要)
- 常微分方程机敏问答[3] #20210622
- 利用爬虫编译翻译器 (包含防御反爬虫)
- 实用工具推荐【待更新】
- 将图片内嵌到 exe 文件中
- 高鸿业微观经济学第8版笔记和课后答案
- 计算机没有音频驱动程序,电脑有驱动却没有高清晰音频管理器华硕主板应该装什么声卡驱动...
- 数据响应式的原理(简单理解 为了面试)
- 使用imagine/imagine实现制作一个图片
- Onlyoffice 添加中文字体,并修改字体大小显示为小四、四号等中文
- 哈佛分析框架国内外文献综述
- [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究