题意:

有 $n$ 只老鼠和 $m$ 个鼠洞,第 $i$ 只老鼠的坐标为 $x_i$,第 $j$ 个鼠洞的坐标为 $p_j$ ,容量为 $c_j$。

第 $i$ 只老鼠钻进第 $j$ 个鼠洞的距离为 $|xi-pj|$ ,问所有老鼠都进洞的最小距离总和是多少。

解法:

方法一:

  考虑dp

  每一个移动无非是$p_i - x_j$,$x_i - p_j$

  $f(i,j)$ 表示前 $i$ 个要素,有 $j$ 个mouse没有归属的最小值。

  如果当前为mouse

  $f(i,j) = min \{ f(i-1,j) - x_i , f(i-1,j-1) + x_i \}$

  如果当前为hole

  $f(i,j) = min \{ f(i-1,j+k) + k p_i - (c_i - k) p_i \}$

  单调队列优化 $O(n^2)$。

  然而在hole的个数 ≠ mouse的count的时候,显然是错的。

方法二:

  考虑换一个方法dp

  注意到最优解时每一个洞主管的 是 位置相邻的连续一段的老鼠,我们先把hole 和mouse排序。

  $f(i,j)$ 表示用前 $i$ 个hole 来承接 前 $j$ 个mouse。

  $f(i,j) = min \{ f(i-1,k) - S(k) \} + S(j) , (max \{ 0, j-c(i) \} \leq k \leq j)$

  单调队列优化 $O(n^2)$

  

  

#include <bits/stdc++.h>

#define N 5010
#define LL long long
#define INF 0x3f3f3f3f3f3f3f3fLL using namespace std; struct hole
{
int x,cnt;
}b[N]; int n,m,a[N],q[N],st,en;
LL f[N][N],sum[N]; int Abs(int x)
{
if(x<) return -x;
return x;
} bool cmp(hole a,hole b)
{
return a.x<b.x;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
sort(a+,a+n+);
for(int i=;i<=m;i++) scanf("%d%d",&b[i].x,&b[i].cnt);
sort(b+,b+m+,cmp);
memset(f,0x3f,sizeof(f));
f[][]=;
for(int i=;i<=m;i++)
{
st=, en=;
sum[]=;
for(int j=;j<=n;j++) sum[j]=sum[j-]+(LL)Abs(b[i].x-a[j]);
for(int j=;j<=n;j++)
{
int l = max(,j-b[i].cnt);
while(st<=en && q[st]<l) st++;
LL val = f[i-][j]-sum[j];
while(st<=en && f[i-][q[en]]-sum[q[en]] >= val) en--;
q[++en]=j;
if(st<=en)
{
int k=q[st];
f[i][j] = f[i-][k]+sum[j]-sum[k];
}
}
}
if(f[m][n] < INF) cout << f[m][n] << endl;
else cout << - << endl;
return ;
}

Mice and Holes的更多相关文章

  1. Codeforces 797 F Mice and Holes

    http://codeforces.com/problemset/problem/797/F F. Mice and Holes time limit per test             1.5 ...

  2. AC日记——Mice and Holes codeforces 797f

    797F - Mice and Holes 思路: XXYXX: 代码: #include <cmath> #include <cstdio> #include <cst ...

  3. Mice and Holes 单调队列优化dp

    Mice and Holes 单调队列优化dp n个老鼠,m个洞,告诉你他们的一维坐标和m个洞的容量限制,问最小总距离.1 ≤ n, m ≤ 5000. ​ 首先列出朴素的dp方程:\(f[i][j] ...

  4. Mice and Holes CodeForces - 797F

    Mice and Holes CodeForces - 797F 题意:有n只老鼠和m个洞,都在一个数轴上,老鼠坐标为x[1],...,x[n],洞的坐标为p[1],...,p[m],每个洞能容纳的老 ...

  5. CF797F Mice and Holes 贪心、栈维护DP

    传送门 首先\(\sum c\)有些大,考虑将其缩小降低难度 考虑一个贪心:第一次所有老鼠都进入其左边第一个容量未满的洞(如果左边没有就进入右边第一个未满的洞),第二次所有老鼠都进入其右边第一个容量未 ...

  6. [Codeforces797F]Mice and Holes

    Problem n个老鼠,m个洞,告诉你他们的一维坐标和m个洞的容量限制,问最小总距离. Solution 用dp[i][j]表示前i个洞,进了前j个老鼠的最小代价 dp[i][j]=min(dp[i ...

  7. [CodeForces-797F]Mice and Holes

    题目大意: 在一条直线上,有n个老鼠,m个洞. 每个老鼠i都有一个初始位置x[i]. 每个洞i都有一个固定位置p[i]和容量限制c[i]. 求所有老鼠都进洞的最小距离总和. 思路: 动态规划. 用f[ ...

  8. Educational Codeforces Round 19

    A. k-Factorization 题目大意:给一个数n,求k个大于1的数,乘积为n.(n<=100,000,k<=20) 思路:分解质因数呗 #include<cstdio> ...

  9. 贪心/构造/DP 杂题选做Ⅲ

    颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...

随机推荐

  1. javascript 高级编程系列 - 继承

    1. 原型链继承 (缺点:子类继承父类的引用类型的属性值会在各个实例中共享,创建子类实例时无法向父类构造函数传递参数) // 定义父类构造函数 function SuperClass(father, ...

  2. 基于bootstrap+MySQL搭建动态网站

    这个只是在上个练习项目中的后台管理项目加入了MySQL,数据不是写死的,而是从数据库中获取到的,获取到数据执行增删改查操作,没什么 计数难度,不做介绍

  3. 基于Django做权限控制

    一.权限信息初始化 二.中间件操作 三.自定义标签 补充:数据表设计,源码下载,其它

  4. Python自动生成文章

    为了应付某些情况,需要做17份记录.虽然不很重要,但是17份完全雷同也不很好.大体看了一下,此记录大致分为四段.于是决定每段提供四种选项,每段四选一,拼凑成四段文字,存成一个文件.文件名就叫“XX记录 ...

  5. Android下强制显示ActionBar的overflowbutton

    因为手机硬件情况的不同,在没有物理Menu键的手机上.ActionBar的overflowbutton会有显示不出来的情况,能够通过反射的方式改动ViewConfiguration类中的sHasPer ...

  6. Server.xml配置详解

    <Server port="8005" shutdown="SHUTDOWN"> <!-- 属性说明 port:指定一个端口,这个端口负责监听 ...

  7. jquery live hover

    $("table tr").live({ mouseenter: function() { //todo }, mouseleave: function() { //todo } ...

  8. EasyDarwin开源流媒体云平台设计与实现(分布式+负载均衡)

    前言 早在2013年我就设计了一套架构非常简单的分布式流媒体服务器平台<基于Darwin实现的分布式流媒体直播服务器系统>,当时的考虑如今看来有诸多的细节点没有考虑到:1.CMS是单点部署 ...

  9. Netty 100万级高并发服务器配置

    前言 每一种该语言在某些极限情况下的表现一般都不太一样,那么我常用的Java语言,在达到100万个并发连接情况下,会怎么样呢,有些好奇,更有些期盼. 这次使用经常使用的顺手的netty NIO框架(n ...

  10. React深入源码--了解Redux用法之Provider

    在Redux中最核心的自然是组件,以及组件相关的事件与数据流方式.但是我们在Redux中并没有采用传统的方式在getInitialState()中去初始化数据,而是采用Provider统一处理,省去了 ...