题目描述
当给出村庄数 n,每个村庄的学生数、村庄之间的距离以及要建的学校数 k
之后,求出合理的建学校的方案,使学生走的距离和为最少。
距离和为每个学生走的距离,学校是建在若干个村里的,每个村里的学生会去最近的学校
样例输入
3 2
21 18 31
10 8
样例输出
144
思路
预处理出每个区间会去哪个学校
设dis[i][j]表示i到j都去学校j的最短距离
然后dp, 设 f i , j f_{i, j} fi,j表示前i个村庄建j个学校,而且学生都只在前i个村庄上学,就瞎搞搞,枚举一下当前建学校的区间的开头结尾,然后就求一下新代价,取min就行了
开long long
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int n, k;
ll p[1001], s[1001], w[1001];
ll dis