一開始沒看懂,看了樣例才知道每一天都要從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天才能運完。貨物運輸過程中一般要轉停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨物能夠按時到達目的地。但是修...