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

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

Sample Input

11
3
21
14
6
18
10
2
15
12
3
2
2

Sample Output

15
题解:首先我们很容易想到,要使误差小,先将所有的省区排序,再来考虑将这些省区分段,一段算作一个颜色。
然后设f[i][j]为前i个省区用j个颜色的最小误差,W[i][j]设为i~j省区为同个颜色会带来的误差,先通过前缀和把w数组处理好,然后用一个变量k来松弛i~j这个区间,若k+1~i为同个颜色 ,则f[i][j]=min(f[i]][j],f[k][j-1]+w[k+1][i]]);
不过前缀和的地方要稍微推一下。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,mid,a[],w[][],f[][];
long long s[],k1,k2;
int min(int a,int b)
{
if (a>b) return b;
else return a;
}
int main()
{
cin>>n>>m;
for (int i=;i<=n;i++) cin>>a[i];
sort(a+,a+n+);
s[]=;
for (int i=;i<=n;i++) s[i]+=s[i-]+a[i];
for (int i=;i<=n;i++)
for (int j=i;j<=n;j++)
{
mid=(i+j+)/;
k1=a[mid]*(mid-i)-(s[mid-]-s[i-])+(s[j]-s[mid])-a[mid]*(j-mid);//把这段区间涂成一个颜色所会带来的误差值
w[i][j]=k1;
}
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]);//把它分成两段,k+1~i用一个颜色
cout<<f[n][m]<<endl;
return ;
}

BZOJ2933: [Poi1999]地图的更多相关文章

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

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

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

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

  3. BZOJ2933:POI1999地图

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

  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. 视频聊天APP

    1 通讯 P2P 1.1 关键字[java udp 打洞] 参考文章 http://www.oschina.net/code/snippet_165555_17279 关键代码 package org ...

  2. Unity5 AssetBundle 打包以及加载

    using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEditor; us ...

  3. jahshaka 2.0 环境配置

    经过断断续续的探索,终于在自己的win7电脑上编译并运行成功了jahshaka源代码. 环境配置: 首先,jahshaka 2.0提供了vs 2003 和vs 2005两个版本的工程文件,还需要qt3 ...

  4. c++ auto_ptr智能指针

    c++ auto_ptr智能指针 该类型在头文件memory中,在程序的开通通过 #include<memory> 导入,接下来讲解该智能指针的作用和使用. 使用方法: auto_ptr& ...

  5. DeepLearning学习(1)--多层感知机

    想直接学习卷积神经网络,结果发现因为神经网络的基础较弱,学习起来比较困难,所以准备一步步学.并记录下来,其中会有很多摘抄. (一)什么是多层感知器和反向传播 1,单个神经元 神经网络的基本单元就是神经 ...

  6. SQL Server 2008R2数据库文件导入到SQL Server 2008数据库中

    最近,电脑重装系统之后,安装了SQL Server 2008.附加数据库文件的时候,发现无法附加,提示版本不对.想起来,原来的数据库版本是SQL Server 2008R2.低版本的数据库管理工具无法 ...

  7. C# DataTable 和List之间相互转换的方法

    介绍:List/IEnumerable转换到DataTable/DataView,以及DataTable转换到List 正文: 一.List<T>/IEnumerable转换到DataTa ...

  8. tesseract配置过程

    tesseract配置过程: 1. 为了避免配置环境变量,可以先下载一个 tesseract-ocr-setup-3.02.02.exe(tesseract配置文件夹里有),然后安装(假设安装目录为D ...

  9. Android——数据的存储和访问

    1.数据文件的存取操作 我们可以将数据存取在Android应用数据的默认存储地址,其地址为:安装包/data/data/<package name>/files/ 1)向文件中写入数据 p ...

  10. http2协议翻译(转)

    超文本传输协议版本 2 IETF HTTP2草案(draft-ietf-httpbis-http2-13) 摘要 本规范描述了一种优化的超文本传输协议(HTTP).HTTP/2通过引进报头字段压缩以及 ...