ZJOI2006 物流運輸

2022-08-01 17:33:15 字數 945 閱讀 3442

一開始沒看懂,看了樣例才知道每一天都要從a->b,如果今天和昨天的路線不同就需要多花費k元。

那麼怎麼做呢,好像還挺簡單(看了題解之後),設f[i]為i天之後最少的花費,考慮轉移

f[i]=min(f[i],f[j-1]+(i-j+1)*val+k) (1<=j<=i),就是列舉從第幾天之後路線改變,從第j天到第i天路線相同。

如何維護路線是否相同,首先肯定要求最短路。為了第j天到第i天的路線相同,那麼乙個碼頭只有在中間任何一天不能停,那麼他就不能用。

所以我們倒著列舉j,標記不能走的碼頭。當不能到b時就break。

#includeusing

namespace

std;

//f[i]=min(f[i],f[j]+(l-j)*val+k)

//1<=j<=i

intn,n1,k,m,p;

bool dead[25][105],broken[25],vis[25

];int dis[105],f[105

];int cnt,head[105

];struct

edgee[

10005

];void add(int x,int y,int

val);

head[x]=cnt;

}int

spfa()}}

}return

dis[n1];

}int

main()

intd;

scanf("%d

",&d);

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

memset(f,

0x3f,sizeof

(f));

f[0]=-k;

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

}printf("%d

",f[n]);

}

物流運輸

ZJOI2006 物流運輸

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

ZJOI2006 物流運輸

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

ZJOI2006 物流運輸

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