## 题目描述

在猴村有一条笔直的山路,这条山路很窄,宽度忽略不计。有 n只猴子正站在山路上静静地观望今天来参加比赛的各位同学。用一个正整数Xi表示第i只猴子所站位置,任意两只猴子的所站位置互不相同。在这条山路的m个位置上种着一些高大的树木,正整数Yj表示第j棵树木所在的位置,任意两棵树的位置互不相同。

正当猴子们聚精会神的欣赏各位高超编程技能 聚精会神的欣赏各位高超编程技能时,一只老虎大摇摆的走了过来。猴子们吓得直冒冷汗,第一反应就是找棵大树爬上去这样能避免被老虎咬死或者吃掉(不考虑老虎上树问题)。

在位置a的猴子跑到在位置b的大树上,需要消耗能量为|a-b|(即 a-b的绝对值)。为了尽可能有效利用这些大树避难,每棵上至少要一只猴子。 请编程计算n只猴子全部上树最少需要消耗多能量?

输入输出格式

输入格式:

输入共4行。

第1行一个整数 n,表示猴子的数量。

第2行n个整数,i个整数个整数Xi表示第i只猴子所在的位置。

第3行一个整数m,表示大树的数量。

第4行m个整数,第j个整数表示第j棵大树所在的位置。

输出格式:

输出一行,一个整数表示n只猴子全部上树最少需要消耗的能量。

输入输出样例

输入样例#1: 复制

3

1 4 5

2

3 8

输出样例#1: 复制

6

输入样例#2: 复制

3

3 1 10

2

8 3

输出样例#2: 复制

4

说明

30%的数据,\(1≤n≤500,1≤X_i,Y_i≤10^5\)。

100%的数据,\(1≤n≤5000,1≤m≤n,1≤Xi_,Y_i≤10^9\)。

Solution

动态规划+滚动数组优化空间+排序。

先把猴子和树排序,这很容易想到,贪心肯定不行,因为你无法确定哪些树有猴子,而且保证全局最优,于是想到了DP。

我们设\(f[i][j]\)代表前\(i\)只猴子占满了前\(j\)颗树,容易想到DP方程为

\[f[i][j]=min(f[i-1][j-1]+abs(x[i]-y[j]),f[i-1][j]+mn[i][j]);
\]

\(mn[i][j]\)代表第\(i\)只猴子在上前\(j\)颗树的最小能量,可以预处理出来。

发现\(f[i][j]会爆\)\(int\),所以要开\(long~long\),数据范围5000?,好像

\(f[5000][5000]\)会爆,容易发现\(f[i][j]\)转移只和上一次有关,可以用滚动数组,于是转移方程为$$f[p][j]=min(f[pxor1][j-1]+abs(x[i]-y[j]),f[pxor1][j]+mn[i][j]);$$

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll f[2][5010],x[10010],y[10010];
int mn[5010][5010];
int sba(int x)
{
if(x<0) return -x;
return x;
}
int main()
{
memset(f,0x3f,sizeof(f));
ll n,m;
cin>>n;
for(ll i=1;i<=n;i++)
cin>>x[i];
sort(x+1,x+1+n);
cin>>m;
for(ll i=1;i<=m;i++)
cin>>y[i];
sort(y+1,y+1+m);
for(ll i=1;i<=n;i++)
mn[i][0]=2e9;
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++)
mn[i][j]=min(mn[i][j-1],sba(x[i]-y[j]));
f[1][1]=sba(x[1]-y[1]);
for(ll i=2;i<=n;i++)
{
ll qq=min(i,m);
for(ll j=1;j<=qq;j++)
{
ll p=i%2;
f[p][j]=min(f[p^1][j-1]+sba(x[i]-y[j]),f[p^1][j]+mn[i][j]);
}
}
ll p=n%2;
cout<<f[p][m];
}

博主蒟蒻,可以随意转载,但必须附上原文链接k-z-j

[P2769] 猴子上树的更多相关文章

  1. 《饥荒游戏》SW BUG 刷猴子 & 刷淘气值 办法

    简介 该办法利用刷猴子的方式,通过杀猴子获取淘气值,从而刷出坎普斯,继而刷坎普斯背包 物品准备 灭火器x1 箱子x1 逗猴球x1 猴窝xN 帽贝岩x2 避雷针x1 操作步骤 1.灭火器建造在2个帽贝岩 ...

  2. c语言经典算法——猴子偷桃问题

    题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿 ...

  3. 网络神器Greasemonkey(油猴子)使用方法简介+脚本分享【转载】

    推荐下,觉得这个方法有用, 今天艾薇百科来介绍一下功能强大的Greasemonkey,俗称"油猴子",Greasemonkey可以自由定制网页,实现你想要的各种功能.堪称" ...

  4. sicily 猴子选大王

    题目描述 猴子选大王,有N只猴子,从1-N进行编号.它们按照编号的顺时针方向,排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报1,以后每只猴子报的数字都是它前面猴子所报数字加1.如果一只猴子报的数 ...

  5. 踩个猴尾不容易啊 Canvas画个猴子

    踩个猴尾不容易啊  Canvas画个猴子 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  6. BZOJ2429[HAOI2006]聪明的猴子[最小生成树 kruskal]

    2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 896  Solved: 575[Submit][Statu ...

  7. [BZOJ2429][HAOI2006]聪明的猴子(MST)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2429 分析:要让最大的最小,所以就是最小生成树上的啦,于是问题就变成了有多少个猴子&g ...

  8. Huawei校招机试中的猴子吃桃问题

    //============================================================================ // Name : Monkey& ...

  9. 最小生成树 2429: [HAOI2006]聪明的猴子

    BZOJ 2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 877  Solved: 566[Submit][ ...

随机推荐

  1. js 去掉以逗号分割的字符串中头尾和中间多余的逗号

    let permission = ",,,106,105,108,,,109,110,107,,101,,," let permission = "106,105,108 ...

  2. 洛谷——P2701 [USACO5.3]巨大的牛棚Big Barn

    P2701 [USACO5.3]巨大的牛棚Big Barn 题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他 ...

  3. Nginx+keepalived双机热备(主从模式)

    简单介绍: Keepalived是Linux下面实现VRRP备份路由的高可靠性运行软件,能够真正做到 主服务器和备份服务器故障时IP瞬间无缝交接; Keepalived的目的是模拟路由器的高可用; H ...

  4. The 2016 ACM-ICPC Asia China-Final Contest Promblem D

    显然答案具有单调性,可以二分.问题是 我们二分出一个 堆数,该怎么判定能否达到这个堆数呢? 我们可以很简单的用调整法证明,最底下的一层的冰淇淋肯定是最小的那些,往上叠加的话我们再贪心的让较少的放在较小 ...

  5. Spring实战Day3

    通过XML创建装配bean 1.装配不存在成员变量的bean <bean id="talent" class="cn.jqzhong.Spring.study.da ...

  6. Spring Boot中使用AOP记录请求日志

    这周看别人写的springboot后端代码中有使用AOP记录请求日志,以前没接触过,因此学习下. 一.AOP简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编 ...

  7. Android 中状态栏、标题栏、View的大小及区分

    1.获得状态栏的高度(状态栏相对Window的位置): Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisp ...

  8. 阿里巴巴为什么主推HSF?比Dubbo有哪些优势?

    作者:匿名用户链接:https://www.zhihu.com/question/39560697/answer/187538165来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  9. angular 图片加载失败 情况处理? 如何在ionic中加载本地图片 ?

    1.angular 图片加载失败 情况处理 在directive中定义组件,在ng-src错误时,调用err-src app.directive('errSrc',function(){ return ...

  10. H5实现多图片预览上传,可点击可拖拽控件介绍

    版权声明:欢迎转载,请注明出处:http://blog.csdn.net/weixin_36380516 在做图片上传时发现一个蛮好用的控件,支持多张图片同时上传,可以点击选择图片,也可以将图片拖拽到 ...