uva 662 經典DP郵局問題)

2021-06-29 04:36:28 字數 1167 閱讀 4436

題意:

給在一條直線上的n個漢堡店,以及每個漢堡店在x軸上的座標。

求建m個**產,使得每個漢堡店到m個**產的距離和最小。

解析:經典的郵局dp問題。

首先需要知道到達幾個村莊的最小距離和是這幾個村莊的座標中點。

先用乙個遍歷找出所有i j之間的所有最小距離,然後再dp。

狀態轉移方程:

dp[ i ] [ j ] = min ( dp[ i ] [ j ] , dp[ i - 1 ] [ k ] + dis[ k + 1 ] [ j ] )

dp[ i ] [ j ] 表示在j個村莊內,建第i個郵局的最小距離。

dp[ i  - 1 ] [ k ] + dis[ k + 1 ] [ j ] 表示得的是在 k + 1 到 j 範圍內再建乙個郵局的總花費。

路徑記錄下的是k的值,即為下一段郵局管轄範圍內的開頭村莊座標值,再知道此段範圍末尾的村莊座標值,就可以算出郵局的地點。

**:

#include #include #include #include #include #include #include #include #include #include #define ll long long

using namespace std;

const int inf = 0x3f3f3f3f;

const int maxn = 200 + 10;

const int maxm = 30 + 10;

int dp[maxm][maxn];

int path[maxn][maxn];

int dis[maxn][maxn];

int x[maxn];

void print_path(int i, int j)

int main()

for (int i = 1; i <= n; i++)}//

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

for (int i = 2; i <= m; i++)//youju}}

}printf("chain %d\n", ca++);

print_path(m, n);

printf("total distance sum = %d\n\n", dp[m][n]);

}return 0;

}

郵局 dp經典問題

題目 題意 一些村莊被建立在一條筆直的高速公路邊上,我們用一條座標軸來描述這條高速公路,每乙個村莊的座標都是整數,沒 有兩個村莊座標相同。兩個村莊間的距離,定義為它們的座標值差的絕對值。我們需要在一些村莊建立郵局 當然,並不是每 乙個村莊都必須建立郵局,郵局必須被建立在村莊裡,因此它的座標和它所在的...

郵局問題 DP

問題描述 一些村莊建在一條筆直的高速公路邊上,我們用一條座標軸來描述這條公路,每個村莊的座標都是整數,沒有兩個村莊的座標相同。兩個村莊的距離定義為座標之差的絕對值。我們需要在某些村莊建立郵局。使每個村莊使用與它距離最近的郵局,建立郵局的原則是 所有村莊到各自使用的郵局的距離總和最小。輸入格式 第一行...

經典DP問題

動態規劃5個經典問題解析 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子序中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和為20。數塔問題 要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?include s...