【题目描述】

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

【题目链接】

    http://noi.openjudge.cn/ch0206/7624/

【算法】

  1. 定义dp[i][j]为前i个村庄建j个小学,构建状态转移方程为dp[i][j] = min(dp[i][j], dp[k][j] + cost[i+1][j])  其中cost[i][j]表示第i个村庄到第j个村庄建一个小学的最短距离和
  2. 预处理cost数组,众所周知,满足最短距离和的小学应该建在中位数的村庄处,同时也满足递推关系:cost[i][j] = cost[i][j-1] + dist[j] - dist[i+j>>1]
  3. 前缀和就是村庄所处位置

【代码】

  

#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <cstring>
using namespace std;
int m,n,i,j,k;
int dist[],cost[][],dp[][];
int main()
{
cin>>m>>n;
dist[]=;
for(i=;i<=m;i++)
cin>>dist[i],dist[i]+=dist[i-];
for(i=;i<=m;i++)
for(j=i+;j<=m;j++)
cost[i][j]=cost[i][j-]+dist[j]-dist[i+j>>];
memset(dp,0x7f,sizeof(dp));
for(i=;i<=m;i++) dp[i][]=cost[][i];
for(i=;i<=m;i++)
for(j=;j<=min(i,n);j++)
for(k=j-;k<i;k++)
dp[i][j]=min(dp[i][j],dp[k][j-]+cost[k+][i]);
cout<<dp[m][n];
return ;
}

山区建小学(区间dp+前缀和+预处理)的更多相关文章

  1. P4677 山区建小学|区间dp

    P4677 山区建小学 题目描述 政府在某山区修建了一条道路,恰好穿越总共nn个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为di 为了提高山区 ...

  2. 山区建小学(区间DP)

    山区建小学 时间限制: 1 Sec  内存限制: 128 MB提交: 17  解决: 5[提交][状态][讨论版][命题人:quanxing] 题目描述 政府在某山区修建了一条道路,恰好穿越总共m个村 ...

  3. 【noi 2.6_7624】山区建小学(DP)

    题意:在m个村庄建n个小学,求所有村到最近小学的距离总的最小值. 解法:由于题目是求"离最近的学校",而不是前一个学校,所以枚举学校的具体位置不方便,可转化成区间(学校居区间中间) ...

  4. 【OpenJudge7624】【区间DP】山区建小学

    山区建小学 总时间限制: 1000ms 内存限制: 65536kB [描述] 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两 ...

  5. #DP# ----- OpenJudge山区建小学

    没有记性.到DP不得不写博了,三天后又忘的干干净净.DP是啥 :-) 一道久到不能再久的题了. OpenJudge  7624:山区建小学 总时间限制: 1000ms     内存限制: 65536k ...

  6. 7624:山区建小学(划分dp)

    7624:山区建小学 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄 ...

  7. NOI题库7624 山区建小学(162:Post Office / IOI2000 POST OFFICE [input] )

    7624:山区建小学 Description 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为di(为 ...

  8. HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化

    HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...

  9. luogu P4677 山区建小学 |dp

    题目描述 政府在某山区修建了一条道路,恰好穿越总共nnn个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为did_idi​(为正整数),其中,0& ...

随机推荐

  1. java8 时间日期操作包总结

  2. R语言-变量命名规则

    1.大原则:只有字母(区分大小写).数字.“_”(下划线).“.”(英文句号)可以出现. 2.数字.下划线不能开头. 3.英文句号开头不能紧接数字. 就这么简单!

  3. 查询重复数据group by menu_id having count(menu_id)>1

    select * from sys_power_menu WHERE menu_id in ( select menu_id from  sys_power_menu group by menu_id ...

  4. 如何在Web页面里使用高拍仪扫描上传图像

    如何在Web页面里使用高拍仪扫描上传图像 市场上所有的高拍仪都支持扫描图片并保存到本地,一般公司都会提供控件.开发人员只需要在页面集成就可以进行拍照和扫描.只不过一般扫描的图片是保存在本地固定的文件夹 ...

  5. HDU 4758 Walk Through Squares ( Trie图 && 状压DP && 数量限制类型 )

    题意 : 给出一个 n 行.m 列的方格图,现从图左上角(0, 0) 到右下角的 (n, m)走出一个字符串(规定只能往下或者往右走),向右走代表' R ' 向下走则是代表 ' D ' 最后从左上角到 ...

  6. CodeForces 1198C 1199E Matching vs Independent Set

    Time limit 1000 ms Memory limit 262144 kB 这题是一场cf里,div1的第三题,div2的第5题 中文题意 给一张无向图,没说连通性,要你选出一个大小为n的匹配 ...

  7. BP算法演示

    本文转载自https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/ Background Backpropaga ...

  8. SpringBoot与数据源

    1.JDBC <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  9. 手机H5设计尺寸

    手机型号 导航栏和状态栏的高度 宽度 高度 可视区域高度 iPhone 4 (4, 4S) 64px 320px 480px 416px iPhone 5 (5c, 5s) 64px 320px 56 ...

  10. justify-content

    CSS3弹性布局内容对齐(justify-content)属性使用详解 内容对齐(justify-content)属性应用在弹性容器上,把弹性项沿着弹性容器的主轴线(main axis)对齐. 该操作 ...