题意:

有 $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. sonar + ieda实现提交代码前代码校验

    代码风格不同一直是一件停头疼的事情,因为不同的工作经验,工作经历,每个人的代码风格不尽相同,造成一些代码在后期的维护当中难以维护, 查阅一些资料之后发现 idea + sonar 的方式比较适合我,实 ...

  2. 从主机给VM Copy文件

    不能从主机给VM 复制文件,在VM里,setting --->option--->shareFolder-->enable-->add(要share的文件路径) then=== ...

  3. 小贝_mysql主从复制作用以及案例

    mysql主从复制 简要: 一.mysql用户授权 二.mysql bin-log日志 三.mysql主从复制   一.mysql用户授权 1.命令 2.作用:进行权限控制 3.样例: (备注: 同意 ...

  4. kubernetes的Service Account和secret

    系列目录 Service Account Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它 ...

  5. kubernetes调度之资源耗尽处理配置

    系列目录 本篇将介绍如何使用kubelet处理资源耗尽的情况 当可用的计算机资源非常低的时候,kubelet仍然要保证节点的稳定性.当处理不可压缩的计算机资源(比如内存或磁盘空间)时,这尤其重要,当这 ...

  6. ZOJ 1516 Uncle Tom&#39;s Inherited Land(二分匹配 最大匹配 匈牙利啊)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=516 Your old uncle Tom inherited a p ...

  7. JAVA RMI远程方法调用简单实例(转载)

    来源:http://www.cnblogs.com/leslies2/archive/2011/05/20/2051844.html RMI的概念 RMI(Remote Method Invocati ...

  8. 在OC项目中实现swift与oc混编 相互引用

    --------------------------------------------------------Begin--------------------------------------- ...

  9. c# vs2010 连接access数据库

    第一次在博客园写博文,由于文采不怎么好,即使是自己很熟悉的东西,写起来也会感觉到不知从何讲起,我想写的多了就好了. 这篇文章主要是介绍怎么用c# 语言 vs2010连接access数据库的,连接字符串 ...

  10. Geoffrey E. Hinton

    https://www.cs.toronto.edu/~hinton/ Geoffrey E. Hinton I am an Engineering Fellow at Google where I ...