我用的是dijkstra+dp(當然是參考大佬們的啦),dijkstra用來進行預處理,處理出dis[start_time][end_time] --[start_time,end_time]時間段的1->m的最短路,其實很簡單,我們首先要把在某個時間段不能裝卸貨物的碼頭給預處理出來,可以用字首和來處理,具體看**,所以當到達這樣點時,我們直接continue。dp階段,我們初始dp[0]=-k,為什麼?因為 0 時間沒有通過任何碼頭,並且我們到第一次執行的航線還要交換一次航線,所以是-k,因為要抵消交換一次航線的代價。轉移方程 是:dp[i]=min(dp[i],dp[j]+dis[j+1][i]*(i-j)+k)。
還有就是 當dis[j+1][i]是inf時,不要進行轉移(inf很大的情況,我的inf=1e18,習慣問題),因為爆long long了。
#include#include#include#includeusing namespace std;
typedef long long ll;
typedef pairp;
const int maxn=100;
const int day=200;
const ll inf=1e18;
struct edge
};vectorg[maxn];
ll distan[maxn];
ll dis[day][day];
ll dp[day];
int notok[maxn][day];
bool vis[maxn];
int n,m,k,e,d;
void dijkstra(int stime,int etime)
} }dis[stime][etime]=distan[m];
}int main()
scanf("%d",&d);
for(int i=0;ifor(int i=1;i<=m;i++)
} for(int i=1;i<=n;i++)
} dp[0]=(ll)-k;
for(int i=1;i<=n;i++)
} printf("%lld\n",dp[n]);
}
bzoj1003物流運輸
物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉 停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種 因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨物能夠按時到達目的地。但...
bzoj 1003 物流運輸
description 物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉 停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種 因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨...
bzoj1003 物流運輸
物流公司要把一批貨物從碼頭a運到碼頭b。由於貨物量比較大,需要n天才能運完。貨物運輸過程中一般要轉停好幾個碼頭。物流公司通常會設計一條固定的運輸路線,以便對整個運輸過程實施嚴格的管理和跟蹤。由於各種因素的存在,有的時候某個碼頭會無法裝卸貨物。這時候就必須修改運輸路線,讓貨物能夠按時到達目的地。但是修...