luogu P4677 山區建小學

2022-05-25 12:30:19 字數 682 閱讀 2738

傳送門:

聽說這題lyh只用了2分鐘就a了,ttql

發現只有乙個學校那麼就是找中位數,多個學校呢?

我不知道在**建小學啊,mmp,dp列舉小學範圍的分界點。(我是這麼理解的

所以f[i][j]表示i~j建乙個學校的最小花費,就找中位數對吧。

然後dp[i][j]表示前i個村建j個學校的最小花費, 轉移方程 dp[i][j]=min.

#include#define r register#include

#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;

}

view code

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 ...