題目:
題意: 一些村莊被建立在一條筆直的高速公路邊上,我們用一條座標軸來描述這條高速公路,每乙個村莊的座標都是整數,沒
有兩個村莊座標相同。兩個村莊間的距離,定義為它們的座標值差的絕對值。我們需要在一些村莊建立郵局——當然,並不是每
乙個村莊都必須建立郵局,郵局必須被建立在村莊裡,因此它的座標和它所在的村莊座標相同。每個村莊使用離它最近的那個
郵局,建立這些郵局的原則是:所有村莊到各自所使用的郵局的距離總和最小。
你的任務是編寫乙個程式,在給定了每個村莊座標和將要建立的郵局數之後,按照上述原則,合理地選擇這些郵局的位置。
求出的所有村莊到距離它最近的郵局的距離總和.
分析:給定乙個序列,假設我們要建乙個郵局,那麼一定是在這個序列的中點,所以我們可以先預處理出序列區間[l,r
]之間建立
乙個郵局的最短距離和w[l][r],然後用dp[i][j]表示到i個村莊建立j個郵局的最短距離和,那麼就有狀態轉移方程:
#include #include #include using namespace std;
const int inf = ~0u>>1;
const int n = 305;
int w[n][n];
int dp[n][35];
int a[n];
int n,m;
void init(int a,int n)
int work()
for(int j=2;j<=m;j++)
{for(int i=j+1;i<=n;i++)
{dp[i][j] = inf;
for(int k=j-1;k
uva 662 經典DP郵局問題)
題意 給在一條直線上的n個漢堡店,以及每個漢堡店在x軸上的座標。求建m個 產,使得每個漢堡店到m個 產的距離和最小。解析 經典的郵局dp問題。首先需要知道到達幾個村莊的最小距離和是這幾個村莊的座標中點。先用乙個遍歷找出所有i j之間的所有最小距離,然後再dp。狀態轉移方程 dp i j min dp...
郵局問題 DP
問題描述 一些村莊建在一條筆直的高速公路邊上,我們用一條座標軸來描述這條公路,每個村莊的座標都是整數,沒有兩個村莊的座標相同。兩個村莊的距離定義為座標之差的絕對值。我們需要在某些村莊建立郵局。使每個村莊使用與它距離最近的郵局,建立郵局的原則是 所有村莊到各自使用的郵局的距離總和最小。輸入格式 第一行...
經典DP問題
動態規劃5個經典問題解析 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子序中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和為20。數塔問題 要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?include s...