傳送門:
聽說這題lyh只用了2分鐘就a了,ttql
發現只有乙個學校那麼就是找中位數,多個學校呢?
我不知道在**建小學啊,mmp,dp列舉小學範圍的分界點。(我是這麼理解的
所以f[i][j]表示i~j建乙個學校的最小花費,就找中位數對吧。
然後dp[i][j]表示前i個村建j個學校的最小花費, 轉移方程 dp[i][j]=min.
#include#define r register#includeview code#include
using
namespace
std;
int n,m,s[510
];int f[510][510
];int dp[510][510
];int
main ()
for(r int i=1;i<=n;i++)
}memset(dp,
0x3f,sizeof
(dp));
dp[0][0]=0
;
for(r int i=1;i<=n;i++)
for(r int k=j-1;k<=i;k++)}}
printf(
"%d\n
",dp[n][m]);
return0;
}
luogu P4677 山區建小學 dp
題目描述 在某山區修建了一條道路,恰好穿越總共nnn個村莊的每個村莊一次,沒有迴路或交叉,任意兩個村莊只能通過這條路來往。已知任意兩個相鄰的村莊之間的距離為did idi 為正整數 其中,0輸出格式 各村莊到最近學校的距離之和的最小值。輸入格式 第1行為n和m,其間用空格間隔。第2行為n 1個整數,...
洛谷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 ...