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

来源:互联网 发布:淘宝手机端gif图不动 编辑:程序博客网 时间:2024/04/30 05:07
7624:山区建小学

Description

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

Input

第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。

Output

各村庄到最近学校的距离之和的最小值。

Sample Input

10 2

3 1 3 1 1 1 1 1 3

Sample Output

18

 

 

【思路】

   划分型DP。

   首先对于ij区间,将学校建在中点位置距离区间内的点最短。

   设d[i][j]表示前i个村庄建j所学校的最短距离。则有转移式:

     d[i][j]=min{d[k][j-1]+cost(k+1,i) }  (j-1<= k <i)

   转移式表示在区间k+1..i的中点建立一所学校使这个区间内的所有村庄都到这里上学,其中cost为最小距离之和。

 

【代码】

 

 1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 using namespace std; 5  6 const int maxn = 500+10; 7 const int INF=0x3f3f3f3f; 8  9 int d[maxn][maxn];10 int sum[maxn];11 int cost[maxn][maxn];12 int n,m;13 14 void get_cost()15 {16     for(int i=1;i<=n;i++)17        for(int j=i;j<=n;j++)18         {19             cost[i][j]=0;20             int mid=i+(j-i)/2;21             for(int k=i;k<=j;k++) cost[i][j] += abs(sum[mid]-sum[k]);22         }23 }24 25 int dp(int i,int j)26 {27     int &ans=d[i][j];28     if(ans<INF) return ans;29     30     if(i<j) return INF;31     if(i==j) return ans=0;       //i==j32     if(j==1) return ans=cost[1][i]; //cost(1,i)33     34     for(int k=j-1;k<i;k++)35        ans=min(ans,dp(k,j-1)+cost[k+1][i]);36     return ans;37 }38 39 int main() {40     ios::sync_with_stdio(false);41     cin>>n>>m;42     for(int i=2;i<=n;i++) cin>>sum[i] , sum[i] += sum[i-1]; 43     44     get_cost();45 46     memset(d,0x3f,sizeof(d));47     cout<<dp(n,m)<<"\n";48     49     return 0;50 }

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 笑起来卧蚕很大怎么办 卧蚕眼袋都有怎么办 3个月宝宝眉毛淡怎么办 1个月宝宝眉毛淡怎么办 我眉毛很淡又少怎么办 脸两侧颧骨太宽怎么办 脸的两边太宽怎么办 脸宽怎么办可以瘦下来 白眼球红了一块怎么办 三国志13坏档了怎么办 权倾三国的战车怎么办 勾线笔笔头干了怎么办 水彩笔没有水了怎么办 水彩笔不出水了怎么办 去眼袋后有皱纹怎么办 一笑眼角有皱纹怎么办 打了玻尿酸淤青怎么办 眉头两边长痘痘怎么办 下巴和额头长痘怎么办 额头上一直长痘怎么办 额头上的闭合性粉刺怎么办 脸上有多长痘痘怎么办 雄性激素过多长痘痘怎么办 额头上反复长痘怎么办 汽车脱审一个月怎么办 山药弄到手上痒怎么办 山药弄到皮肤痒怎么办 喉咙痒咳嗽痰多怎么办 老赖2年后仍不还怎么办 老赖欠款不还怎么办 酒店丢了房卡怎么办 微信上买狗被骗怎么办 洋码头不给退货怎么办 代购被海关查了怎么办 洋码头被投诉了怎么办 安利网上办卡怎么办 美图m6拍照模糊怎么办 买的发箍戴着紧怎么办 带发卡老是滑掉怎么办 发卡戴不住总滑怎么办 皮肤皮肤干燥起皮怎么办