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

思路:
  动态规划。
  用f[i][j]表示前i个洞、前j只老鼠的最小距离总和。
  用sum[i][j]表示前j个老鼠都进入第i个洞的距离总和。
  可以得到以下DP方程:
  f[i][j]=min{f[i-1][k]-sum[i][k]|k<=j}+sum[i][j]。
  然后就MLE,发现sum可以每次求出来,f如果倒着推,也可以省掉一维。
  这样空间复杂度就是O(n)的,时间复杂度是O(n^2m)的,在第42个点TLE了。
  考虑使用单调队列维护f[i-1][k]-sum[i][k]的min,做到O(nm)。

 #include<deque>
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
register bool neg=false;
while(!isdigit(ch=getchar())) if(ch=='-') neg=true;
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return neg?-x:x;
}
const long long inf=0x7fffffffffffffffll;
const int N=;
int x[N];
struct Hole {
int p,c;
bool operator < (const Hole &another) const {
return p<another.p;
}
};
Hole h[N];
long long f[][N],sum[N];
std::deque<int> q;
int main() {
int n=getint(),m=getint();
for(register int i=;i<=n;i++) {
x[i]=getint();
}
for(register int i=;i<=m;i++) {
h[i]=(Hole){getint(),getint()};
}
std::sort(&x[],&x[n+]);
std::sort(&h[],&h[m+]);
std::fill(&f[][],&f[][n+],inf);
for(register int i=;i<=m;i++) {
for(register int j=;j<=n;j++) {
sum[j]=sum[j-]+std::abs(h[i].p-x[j]);
}
q.clear();
q.push_back();
for(register int j=;j<=n;j++) {
while(!q.empty()&&j-q.front()>h[i].c) {
q.pop_front();
}
while(!q.empty()&&f[!(i&)][j]-sum[j]<=f[!(i&)][q.back()]-sum[q.back()]) {
q.pop_back();
}
q.push_back(j);
f[i&][j]=f[!(i&)][q.front()]+sum[j]-sum[q.front()];
}
}
printf("%I64d\n",f[m&][n]!=inf?f[m&][n]:-);
return ;
}

[CodeForces-797F]Mice and Holes的更多相关文章

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

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

  2. Mice and Holes CodeForces - 797F

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

  3. Codeforces 797 F Mice and Holes

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

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

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

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

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

  6. Codeforces 793C - Mice problem(几何)

    题目链接:http://codeforces.com/problemset/problem/793/C 题目大意:给你一个捕鼠器坐标,和各个老鼠的的坐标以及相应坐标的移动速度,问你是否存在一个时间点可 ...

  7. [Codeforces797F]Mice and Holes

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

  8. Mice and Holes

    题意: 有 $n$ 只老鼠和 $m$ 个鼠洞,第 $i$ 只老鼠的坐标为 $x_i$,第 $j$ 个鼠洞的坐标为 $p_j$ ,容量为 $c_j$. 第 $i$ 只老鼠钻进第 $j$ 个鼠洞的距离为 ...

  9. Educational Codeforces Round 19

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

随机推荐

  1. 在Windows下安装MongoDB

    概述 读者可以通过本文来学习在Windows操作系统上安装MongoDB. 从2.2版本开始,Mongo DB不在支持Windows XP.请使用最近的windows来安装最近发布的MongoDB.本 ...

  2. 2017ACM暑期多校联合训练 - Team 6 1002 HDU 6097 Mindis (数学)

    题目链接 Problem Description The center coordinate of the circle C is O, the coordinate of O is (0,0) , ...

  3. Lithium中关键特性更新

    Lithium中关键特性更新 1. Lithium特性更新概述 Lithium相对于Helium更新特性共27项,其中原有特性提升或增强13项,新增特性14项,如下表所示 特性类型 相对于Helium ...

  4. 初识smarty

    个人体会(不完全正确):就是smarty就是为了更好的使得php/html结合做出来的一个框架. ,

  5. 15 - reduce-pratial偏函数-lsu_cache

    目录 介绍 1 reduce方法 2 partial方法(偏函数) 2.1 partial方法基本使用 2.2 partial原码分析 2.3 functools.warps实现分析 3 lsu_ca ...

  6. Linux系统调优及安全设置

    1.关闭SELinux #临时关闭 setenforce 0 #永久关闭 vim /etc/selinux/config SELINUX=disabled 2.设定运行级别为3 #设定运行级别 vim ...

  7. C语言实现knn

    以后写代码一定要谨慎,提高代码的正确率. /*************************************** * 1.初始化距离为最大值 * 2.计算未知样本和每个训练样本的距离为dis ...

  8. 服务器fsockopen函数和pfsockopen函数开启及作用

    摘要: fsockopen()函数的作用是可以用来打开一个socket连接,另一个函数pfsockopen()也有相似的功能,只不过后者是一个“持续”(persistent)的fsockopen()函 ...

  9. beautifulsoup简单用法

    原文地址 http://www.cnblogs.com/yupeng/p/3362031.html 这篇文章讲的也很全 http://www.cnblogs.com/twinsclover/archi ...

  10. [实战]MVC5+EF6+MySql企业网盘实战(24)——视频列表

    写在前面 上篇文章实现了文档列表,所以实现视频列表就依葫芦画瓢就行了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) ...