ZJOI2006 物流運輸

2022-03-25 18:51:08 字數 1659 閱讀 2242

這道題的思路應該為$dp$+最短路。

狀態設計:

$g[i][j]$表示從第$i$時刻(注意,是時刻)到第$j$時刻過程中不改變路線時的最優解。顯然,是將在這期間內所有要關閉的港口從圖中刪除,然後求最短路。最後乘上$j-i$即可。

$f[i]$表示第$i$時刻的最優解。

狀態轉移:設之前的第$j$時刻,從第$j$時刻轉移到第$i$時刻,要取$f[j]+g[j][i]+k$的最小值。

所以這題得解,時間複雜度為$o(n^2mlogm)$,鑑於本題$n \leq 100$、$m \leq 20$,該複雜度無壓力。

1 #include 2

3using

namespace

std;45

#define rep(i, a, b) for (register int i = a; i <= b; ++i)

6#define minn(a, b) a = min(a, b);

7#define ll long long

89 inline int

read()

1516

const

int maxn = 20 + 5, maxm = 100 + 5;17

18struct

edge ;

2122

struct

node

27};

2829

intn, m, k, e, d, ban[maxn], b[maxm][maxm];

30ll f[maxm], g[maxm][maxm];

3132 priority_queueq, empty;

3334

struct

graph

44void add(int u, int v, int

w) ;

46 g[u] =m;47}

48int

dijkstra() );

53 dis[1] = 0;54

while (!q.empty()) );63}

64}65}

66return

dis[n];67}

68} g;

6970

intmain()

7980 memset(b, 0, sizeof

(b));

8182 d =read();

83 rep(i, 1

, d)

8788 rep(i, 0

, n) 94}

9596 memset(f, 0x3f, sizeof

(f));

97 f[0] = -k;

98 rep(i, 1

, n)

99 rep(j, 0, i-1

)100 minn(f[i], f[j] + g[j][i] +k);

101 f[0] = 0

;102

103 printf("

%lld

", f[n]);

104105

return0;

106 }

ZJOI2006 物流運輸

description 物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨物能...

ZJOI2006 物流運輸

dp套最短路。還是蒟蒻做題少。開始想的是狀壓dp。但是因為太蒻了,不會很高效地處理一些點集的最短路,弄了乙個t飛的演算法。之後看了題解才知道原來是可以用dp套最短路做的。為什麼需要dp?因為本題涉及到狀態的選擇。每一天要麼不更換線路,要麼更換。顯然這個東西是沒有辦法貪心搞的,所以只能用dp把狀態整合...

ZJOI2006 物流運輸

物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨物能夠按時到達目的地。但是修...