Description 

   一个人口统计办公室要绘制一张地图。由于技术的原因只能使用少量的颜色。两个有相同或相近人口的区域在地图应用相同的颜色。例如一种颜色k,则A(k) 是相应的数,则有:
  • 在用颜色k的区域中至少有一半的区域的人口不大于A(k)
  • 在用颜色k的区域中至少有一半的区域的人口不小于A(k)
   区域颜色误差是该区域的人口与A(k)差的绝对值。累计误差是所有区域颜色误差的总和。我们要求出一种最佳的染色方案(累计误差最小)。
  任务
  写一个程序:
  • 读入每个区域的人口数
  • 计算最小的累计误差
  • 将结果输出

Input

    第一行有一个整数n,表示区域数,10< n <3000。在第二行中的数m表示颜色数,2 <= m <= 10。在接下来的n中每行有一个非负整数,表示一个区域的人口。人口都不超过2^30

Output

    输出一个整数,表示最小的累计误差

Solution

为了使几个区域的人口更加接近,所以先排序,然后考虑怎样将几个区域的人口分为一段,使得误差最小。又因为i号位之前的分法对于之后的分法没有影响,所以果断DP。如果用f[i][j]表示前i个区域分成j段,再去枚举这i个区域最后一段切在哪里(k),就能得到状态转移方程:f[i][j]=min(f[i][j],f[k][j-1]+(k+1到i号位的误差));

那么就要用前缀和处理出把i到j号位分成一段的误差(1<=i<=j<=n),可离线读取。s为a的前缀和数组,那么i到j位的误差就是(mid为i到j的中位数),a[mid]*(mid-i)-(s[mid-1]-s[i-1])+(s[j]-s[mid])-a[mid]*(j-mid),画数轴自己推一下会好理解得多。

Code

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int a[];
long long s[],w[][],f[][];
int main()
{
int n,m;
cin>>n>>m;
for (int i=; i<=n; i++)
cin>>a[i];
sort(a+,a+n+);//先排序
for (int i=; i<=n; i++)
s[i]=s[i-]+a[i];//前缀和
int mid;
for (int i=; i<=n; i++)
for (int j=i; j<=n; j++)
{
mid=(i+j)/;
w[i][j]=a[mid]*(mid-i)-(s[mid-]-s[i-])+(s[j]-s[mid])-a[mid]*(j-mid);//w数组存的是区间的误差
}
for (int i=; i<=n+; i++)
for(int j=; j<=m+; j++)
f[i][j]=;
f[][]=;
for (int i=; i<=n; i++)
for (int j=; j<=m; j++)
for (int k=; k<=i-; k++)
f[i][j]=min(f[i][j],f[k][j-]+w[k+][i]);
cout<<f[n][m]<<endl;
return ;
}

Source

http://www.lydsy.com/JudgeOnline/problem.php?id=2933

BZOJ2933:POI1999地图的更多相关文章

  1. BZOJ2933: [Poi1999]地图

    Description   一个人口统计办公室要绘制一张地图.由于技术的原因只能使用少量的颜色.两个有相同或相近人口的区域在地图应用相同的颜色.例如一种颜色k,则A(k) 是相应的数,则有: 在用颜色 ...

  2. BZOJ2933 [Poi1999]地图【区间DP】

    Description 一个人口统计办公室要绘制一张地图.由于技术的原因只能使用少量的颜色.两个有相同或相近人口的区域在地图应用相同的颜色.例如一种颜色k,则A(k) 是相应的数,则有: 在用颜色k的 ...

  3. BZOJ 2933([Poi1999]地图-区间Dp)

    2933: [Poi1999]地图 Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 7   Solved: 7 [ Submit][ Status] ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. Java 征途:行者的地图

    前段时间应因缘梳理了下自己的 Java 知识体系, 成文一篇望能帮到即将走进或正在 Java 世界跋涉的程序员们. 第一张,基础图 大约在 2003 年我开始知道 Java 的(当时还在用 Delph ...

  6. 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值

    一.写在前面 现在越来越多的API接口要求都要求提供我们的项目SHA1值,开发版目前还要求不高,但是发布版是必定要求的.而目前定位在各大APP中也较为常见,当下主流的百度地图和高德地图都在申请的时候会 ...

  7. C# 程序中嵌入百度地图

    本例是对WinForm中使用百度地图的简要介绍.百度地图目前支持Android开发,IOS开发,Web开发,服务接口,具体可以参照'百度地图开放平台'. [动态加载百度地图]涉及到的知识点: WebB ...

  8. 高德地图api实现地址和经纬度的转换(python)

    利用高德地图web服务api实现地理/逆地址编码 api使用具体方法请查看官方文档 文档网址:http://lbs.amap.com/api/webservice/guide/api/georegeo ...

  9. Highcharts中国地图热力图

    最近有个项目需要将MC销量按大陆各省统计,并以中国地图人力图效果显示.由于项目一直使用Highcharts进行图表的统计,故采用Highmaps来实现. 效果如下: 1)中国各个省.直辖市.自治区: ...

随机推荐

  1. UIAlertController警告视图和操作表单

    //创建一个myAlert1操作表单对象(UIAlertControllerStyleActionSheet为操作表单,UIAlertControllerStyleAlert为警告视图) UIAler ...

  2. paper 125:NSCT——Nonsubsampled contourlet 变换程序(尺度不变性问题研究)

    原文地址:NSCT——Nonsubsampled contourlet 变换程序开发教程1作者:向望大海的鱼 08年,被老板逼得走投无路,xx所得项目看来是实在躲不过去,只好硬着头皮上.开发一款图像处 ...

  3. linux 配置 ftp

    1.检测是否安装ftp 2.apt-get install 安装 (如果安装失败 执行apt-get install update<如果update失败 配置dns让自己的服务器 可以ping ...

  4. python学习笔记系列----(六)错误和异常

    python至少有2类不同的错误:语法错误(Syntax Errors)和异常(Exceptions). 8.1 语法错误 这个单词应该还是很有必要认识的,呵呵,语法错误,也叫解析错误,是我们最不愿意 ...

  5. mysql 每秒钟查询次数、插入次数、删除次数、更新次数的统计

    -show global status where Variable_name in('com_select','com_insert','com_delete','com_update'); 查询出 ...

  6. 响应式内容滑动插件jQuery.bxSlider

    bxSlider特性 1.充分响应各种设备,适应各种屏幕: 2.支持多种滑动模式,水平.垂直以及淡入淡出效果: 3.支持图片.视频以及任意html内容: 4.支持触摸滑动: 5.支持Firefox,C ...

  7. android 使用jdbc1.3.0 操作 sql server

    String connectDB = "jdbc:jtds:sqlserver://172.16.1.15:1433;DatabaseName=YanBu";// 连接字符串换成这 ...

  8. .Net发出图片Request请求

    Stream reader = null; //可能是外部链接 if (imgUrl.ToLower().StartsWith("http://")) { var request ...

  9. MVC3.0 项目升级到 MVC4.0

    按照 http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806 的步骤 第一步:修改web.config 注意,默认的MVC3网站 ...

  10. python :开关,开灯关灯

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...