BZOJ 物流運輸

2022-05-29 05:00:09 字數 1411 閱讀 2375

乙個神奇的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的最短路,其實很簡單,我們首先要把在某個時間段不能裝卸貨物的碼頭給預處理出來,可以用字首和來處理,具體看 ...