题目:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2988

模型简化:

在两条数轴上,第一条有n个点(坐标为a1,a2,a3...),第二条有m个点(坐标为b1,b2,b3...),现在对两条数轴上的点连线,

使得第一条数轴上的每个点必须与第二条数轴上的点相连,并且第二条数轴上的点至少要被连一次,每一个连线的距离为|ai-bj|。

题目转化:

对n个点分为m组,使每一组至少有一个点。并计算最小距离。

猜想:每一组的点一定是一段连续的。dp[n][m]可以解决问题,代表前n个组,占用了前面m个点。

证明:假设每一组都是连续的,就是说b1与a1,a2,...ap   ...ak-1相连,b2与ak,ak+1,...aq...,相连。

现在将apb1和aqb2改为apb2和aqb1,看图可知,改变后的总距离一定比改变之前大。

/**==========================================*   This is a solution for ACM/ICPC problem**   @source£ºuvalive 4987 Evacuation Plan*   @type:  dp*   @author: wust_ysk*   @blog:  http://blog.csdn.net/yskyskyer123*   @email: 2530094312@qq.com*===========================================*/
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int INF =0x3f3f3f3f;
const ll inf=1e15;
const int maxn=  4000   ;
int n,m;struct A
{ll pos;int ind;bool operator<(const A y)const{return pos<y.pos;}}a[maxn+5];struct B
{ll pos;int ind;bool operator<(const B y)const{return pos<y.pos;}
} b[maxn+5];ll dp[maxn+5][maxn+5];
int ans[maxn+5];void find(int index,int till)
{if(index==0)  return;ll ret=0;for(int k=till;k>=index;k--){ret+=abs(a[k].pos-b[index].pos);if(dp[index-1][k-1]+ret==dp[index][till]){for(int j=k;j<=till;j++){int ind=a[j].ind;ans[ind]=b[index].ind;}find(index-1 ,k-1  );return;}}}
int main()
{while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%lld",&a[i].pos);a[i].ind=i;}sort(a+1,a+1+n);scanf("%d",&m);//之前写成了%lld成了wa的原因for(int i=1;i<=m;i++){scanf("%lld",&b[i].pos);b[i].ind=i;}sort(b+1,b+1+m);for(int i=1;i<=m;i++) dp[0][i]=inf;dp[0][0]=0;for(int i=1;i<=m;i++)//m-i;{dp[i][i]=dp[i-1][i-1]+abs(a[i].pos-b[i].pos);for(int k=i+1;k<=n-(m-i);k++){ll ret=abs(a[k].pos-b[i].pos);dp[i][k]=min(dp[i][k-1]+ret ,dp[i-1][k-1]+ret );}}printf("%lld\n",dp[m][n]);find(m,n);for(int i=1;i<=n;i++){if(i!=1)  putchar(' ');printf("%d",ans[i]);}putchar('\n');}return 0;
}

uvalive 4987 Evacuation Plan 疏散计划相关推荐

  1. Execution Plan 执行计划介绍

    后面的练习中需要下载 Demo 数据库, 有很多不同的版本, 可以根据个人需要下载.  下载地址 - http://msftdbprodsamples.codeplex.com/ 1. 什么是执行计划 ...

  2. PLSQL_性能优化系列15_Oracle Explain Plan解析计划解读

    2014-12-19 Created By BaoXinjian 一.摘要 在SQL语句的执行计划中,包含很多字段项和很多模块,其不同字段代表了不同的含义且在不同的情形下某些字段.模块显示或不显示,下 ...

  3. 用计算机绘制火灾逃生路线图,绘制火灾逃生路线图,逃生疏散计划,演练活动记录..._消防考试_帮考网...

    1.画一幅家里的平面图,在图上标出所有可能的逃生出口,如果是高层建筑,标出出门后的疏散楼梯方向: 2.尽量给每个房间画出两条逃生路线,熟悉疏散通道.疏散出口位置,尽量将绘制家庭火灾逃生示意图熟记于心. ...

  4. XJOI 3585 The rescue plan 营救计划 题解

    英文 Time Limit:1s Memory Limit:256M Description Given a n*m map.A "Mengxin" is trapped.You ...

  5. POJ - 2175 Evacuation Plan(最小费用最大流+消圈定理)

    题目链接:点击查看 题目大意:给出n个建筑物和m个避难所,每个建筑物中的人需要到避难所中去避难,规定花费是建筑物和避难所的曼哈顿距离+1,现在给出一种路线方案,问这个方案是不是最优的,如果不是,输出比 ...

  6. oracle sql 执行计划分析_《真正读懂Oracle SQL执行计划》

    maclean_0071人评论1235人阅读2013-10-25 15:18:12 [视频教学:性能优化]Maclean Liu的Oracle性能优化讲座第一回<真正读懂Oracle SQL执行 ...

  7. 【MM模块】ERS and Invoicing Plans 发票计划

    Evaluated Receipt Settlement:ERS 正常我们做发票校验是基于每次收货来做的,这样对于某些频繁采购的货物来讲就比较麻烦了,其实SAP还提供了这样一个方式,我们称之为ERS, ...

  8. Oracle资源管理器(二)-- 创建和使用数据库资源计划

    (参考 http://blog.csdn.net/mrluoe/article/details/7969436 -- 整理并实践通过) 第1步,创建3个用户 SQL> create user s ...

  9. Oracle Explain Plan,hint解释与示例

    Oracle 专业dba博客:http://blog.csdn.net/tianlesoftware Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响S ...

  10. phoenix Explain Plan 翻译

    Explain Plan An EXPLAIN plan tells you a lot about how a query will be run: 一个执行计划会告诉你一个执行计划怎么执行 All ...

最新文章

  1. 为什么匿名内部类参数必须为final类型
  2. 网络爬虫流程与注意事项
  3. 详解Python中的循环的几个类型
  4. 吴恩达邀请9位AI大牛畅想2020:李开复看好医疗教育,LeCun强调自监督学习
  5. 131、ThreadLocal (转载)
  6. 具体解释Hibernate中的事务
  7. 不同位数编译器下的基本数据类型所占的字节数(字节大小):
  8. Echarts地图坐标geoCoordMap数据动态获取
  9. Windows平台手动卸载Oracle Server【完整+干净】
  10. Java运行时数据区域
  11. 集成电路可测性设计(DFT,Design For Testability)
  12. Microsoft Edge浏览器兼容性问题解决方法
  13. vue+elementUI中Dialog实现组件弹框以及子父组件页面传值
  14. 英语背单词有用吗_学英语千万不要背单词 背单词有效吗
  15. vs中资源文件和外部依赖项是什么意思?
  16. Java实现Excel中的Rate函数
  17. Eclipse读取properties文件中文乱码问题
  18. 年薪80W的大数据开发【1024G全套资源】都在这儿!
  19. Apache2 Windows安装与HTTP Server Digest 认证
  20. uni-app中picker组件的“取消”“完成”国际化,能变成英文

热门文章

  1. 派对屋3000效果器怎样调试_卡拉OK前级效果器如何调试?
  2. Android跑指定包Monkey脚本
  3. php如何计算天数,php计算日期相差天数二种方法
  4. 未来智能酒店里 智能管家将24小时待命
  5. 关于“2021中国隧道与地下空间大会暨中国(城市)地下空间学会(筹)成立大会”的通知
  6. nest 模拟器_如何将Nest Thermostat用作运动探测器
  7. ThreeJS —— 机房Demo(二)
  8. VTK-Wight 之vtkIncrementalOctreePointLocator简介
  9. 【IIS】XP系统的IIS发布
  10. 八孔g调短洞箫_八孔G调的箫,对应的1234567应该分别按哪些孔?