題目描述
**在某山區修建了一條道路,恰好穿越總共nnn個村莊的每個村莊一次,沒有迴路或交叉,任意兩個村莊只能通過這條路來往。已知任意兩個相鄰的村莊之間的距離為did_idi(為正整數),其中,0輸出格式
各村莊到最近學校的距離之和的最小值。
輸入格式
第1行為n和m,其間用空格間隔。
第2行為n-1個整數,依次表示從一端到另一端的相鄰村莊的距離,整數之間以空格間隔。
各村莊到最近學校的距離之和的最小值。
#include#include#include#includeusing namespace std;
const int n=505;
int a[n],dp[n][n],f[n][n];
signed main()
memset(dp,0x7f,sizeof(dp)); dp[0][0]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int k=j-1;k<=i;k++)
dp[i][j]=min(dp[i][j],dp[k][j-1]+f[k+1][i]);
}cout<}
luogu P4677 山區建小學
傳送門 聽說這題lyh只用了2分鐘就a了,ttql 發現只有乙個學校那麼就是找中位數,多個學校呢?我不知道在 建小學啊,mmp,dp列舉小學範圍的分界點。我是這麼理解的 所以f i j 表示i j建乙個學校的最小花費,就找中位數對吧。然後dp i j 表示前i個村建j個學校的最小花費,轉移方程 dp...
洛谷P4677 山區建小學
題目大意 給定乙個長度為 n 的序列,現選出 m 個點組成乙個集合,求這 n 個點到這個集合的最近距離的和是多少。題解 狀態設計為 dp i j 表示前 i 個點中選出 j 個點的最近距離和是多少,轉移顯然要列舉上乙個選的點在 即 dp i j min dp k j 1 cost k 1,i 發現在...
luogu4677山區建小學題解 區間DP
這道題方法跟之前題不一樣,我們相當於列舉乙個左右端點來線性擴充套件,同時劃分斷點進行決策 f i j 表示在前 i 個村莊中建立 j 個小學的最小距離總和 我們將列舉到第 i 個村莊作為階段,修了 j 所小學作為狀態,通過列舉斷點 k 來分割第 j 所小學與前 j 1 所小學 也就是說我們判斷 f ...