luogu4677山區建小學題解 區間DP

2022-03-13 05:22:20 字數 863 閱讀 9571

這道題方法跟之前題不一樣,我們相當於列舉乙個左右端點來線性擴充套件,同時劃分斷點進行決策

\(f[i][j]\)表示在前\(i\)個村莊中建立\(j\)個小學的最小距離總和

我們將列舉到第\(i\)個村莊作為階段,修了\(j\)所小學作為狀態,通過列舉斷點\(k\)來分割第\(j\)所小學與前\(j-1\)所小學

也就是說我們判斷\(f[k][j-1]\)加上將新加入的第\(j\)座小學建在後面的第\(k+1\)到第\(i\)座村莊中作出的貢獻(也就是新產生的距離,我們假設\(f[k][j-1]\)已經是最優的)是否更優,那麼怎麼這個貢獻怎麼求呢呢?比較顯然當小學建在\([k+1,i]\)中點處產生的新距離之和最小.為了快速求我們可以先預處理出來

狀態轉移

memset(f,0x3f,sizeof(f));

f[0][0]=0;

for(ri i=1;i<=n;i++)

const int maxn=505;

const int inf=0x7fffffff;

int f[maxn][maxn],s[maxn][maxn],dis[maxn][maxn];

int n,m,pos[maxn];

/*inline int dis(int l,int r)*/

int main()

for(ri i=1;i<=n;i++)

}for(ri l=1;l<=n;l++)

}memset(f,0x3f,sizeof(f));

f[0][0]=0;

for(ri i=1;i<=n;i++)}}

printf("%d\n",f[n][m]);

return 0;

}

luogu P4677 山區建小學

傳送門 聽說這題lyh只用了2分鐘就a了,ttql 發現只有乙個學校那麼就是找中位數,多個學校呢?我不知道在 建小學啊,mmp,dp列舉小學範圍的分界點。我是這麼理解的 所以f i j 表示i j建乙個學校的最小花費,就找中位數對吧。然後dp i j 表示前i個村建j個學校的最小花費,轉移方程 dp...

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 發現在...