乙個神奇的dp,,為數不多自己搞出來的dp。。。。
其實可以發現對於這個題, 單純的最短路亂搞是錯誤的
那麼,,,,dp
我們可以用cost[i][j] 表示從第i天到第j天的不換路花費, 當然算的時候保證這條路在i到j天都可以走, 那麼是一定存在每個時間段不存在一條從起點到終點的道路的, 那麼這個時候要判斷一下賦值成+oo
我們再用dp[i] 表示前i天的總花費
那麼由於我們在算第一天的時候多加了乙個k, 那麼結果減去乙個k就好了
#include
#include
#include
#include
#include
using
namespace
std;
const
int n = 200;
const
int m = 100*100;
const
int oo = 0x3f3f;
#define next next
#define begin begin
#define rep(i, s, t) for(int i = s; i <= t; ++i)
int d, t, n, m;
long
long k;
int pd[n][n];
struct node
};struct dijkstra
void add(int x, int y, int z)
void dij(int s, int s, int t) );
while(!q.empty())
if(flag) continue;
vis[u] = 1;
for(int i = begin[u]; i; i = next[i])
if(dis[v = to[i]] > dis[u] + w[i])
dis[v] = dis[u] + w[i], q.push((node) );}}
/* void doit()
bool check()
return false;
}*/void solve()
scanf("%d", &d);
rep(i, 1, d)
rep(i, 1, t)
rep(j, i, t)
memset(f, 0x3f3f3f, sizeof(f));
f[0] = 0;
rep(i, 1, t)
rep(j, 0, i-1)
f[i] = min(f[i], f[j]+cost[j+1][i]+k);
printf("%lld\n", f[t]-k);
}}t;int main()
畢。 bzoj1003物流運輸
物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉 停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種 因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨物能夠按時到達目的地。但...
bzoj 1003 物流運輸
description 物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉 停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種 因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨...
bzoj 1003 物流運輸
我用的是dijkstra dp 當然是參考大佬們的啦 dijkstra用來進行預處理,處理出dis start time end time start time,end time 時間段的1 m的最短路,其實很簡單,我們首先要把在某個時間段不能裝卸貨物的碼頭給預處理出來,可以用字首和來處理,具體看 ...