描述

政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i < m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设 0 < n < = m < 500 )。请根据给定的m、n以及所有相邻村庄的距离,选择在哪些村庄建小学,才使得所有村到最近小学的距离总和最小,计算最小值。

输入第1行为m和n,其间用空格间隔
第2行为(m-1) 个整数,依次表示从一端到另一端的相邻村庄的距离,整数之间以空格间隔。

例如
10 3
2 4 6 5 2 4 3 1 3
表示在10个村庄建3所学校。第1个村庄与第2个村庄距离为2,第2个村庄与第3个村庄距离为4,第3个村庄与第4个村庄距离为6,...,第9个村庄到第10个村庄的距离为3。输出各村庄到最近学校的距离之和的最小值。样例输入

10 2
3 1 3 1 1 1 1 1 3

样例输出

18

来源元培-From Whf

首先预处理出所有区间内建一个小学所取得的距离的最小值,考虑到小学辐射范围是一个连续的区间(数学归纳即可证得),所以可以枚举每个小学,然后往右更新分割点

#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 100000000
int dp[][][],dis[][],d[],sum[],miv[];
using namespace std;
int main(){ int n,m,tmpl = ,tmpr = ,tmp;
cin>>m>>n;
for(int i = ;i < m;i++){
cin>>d[i];
sum[i+] = sum[i] + d[i];
}
for(int i = ;i <= m;i++){
tmpl = tmpr = ;
for(int l = i;l >= ;--l,tmpl += sum[i] - sum[l]){
for(int r = i;r <= m;++r,tmpr += sum[r]-sum[i]){
if(dp[][l][r] == || tmpl + tmpr < dp[][l][r]) dp[][l][r] = tmpl + tmpr;
}
tmpr = ;
}
}
for(int k = ;k <= n;k++){
for(int i = ;i <= m;i++){
for(int j = i;j <= m;j++){
tmp = min(dp[k-][][i-]+dp[][i][j],dp[k-][][i]+dp[][i+][j]);
if(dp[k][][j] == || dp[k][][j] > tmp)
dp[k][][j] = tmp;
}
}
}
cout<<dp[n][][m];
return ;
}

最新文章

  1. 开发属于自己的yeoman脚手架(generator-reactpackage)
  2. JavaSE高级之GUI编程
  3. Android ShapeDrawable
  4. js获取当前域名及获取页面完整地址并做判断
  5. 【R】如何确定最适合数据集的机器学习算法 - 雪晴数据网
  6. LR测试登陆后进行的操作时 绕过登录
  7. 从零开始学Bootstrap(3)
  8. 《TCP/IP详解 卷一》读书笔记-----TCP persist &amp;Keeplive timer
  9. dbms_job dbms_scheduler简单比较
  10. org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.entity.annotations.House.district in
  11. 老李分享:《Java Performance》笔记1——性能分析基础 1
  12. Linux的chkconfig命令详解
  13. xml添加新节点
  14. 【转】电源芯片选型,容易忽略的“QC”
  15. CSS一个元素同时使用多个类选择器(class selector)
  16. 使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
  17. Window下Neo4j安装教程
  18. 【WebService】快速构建WebService示例
  19. Testng优势
  20. 前端PHP入门-014-参数的引用

热门文章

  1. Normal equations 正规方程组
  2. vue cli 3 打包过大问题
  3. 关于 user agent ua
  4. Int 1的实现过程 (一)
  5. Android(java)学习笔记190:ContentProvider使用之学习ContentProvider(内容提供者)的目的
  6. 6-Java-C(无穷分数)
  7. vue中的main.js打开直接报错问题解决
  8. JavaSE-05 数组
  9. pycharm 破解
  10. Python轮换