乙個公司有三個移動服務員,最初分別在位置1,2,3處。
如果某個位置(用乙個整數表示)有乙個請求,那麼公司必須指派某名員工趕到那個地方去。
某一時刻只有乙個員工能移動,且不允許在同樣的位置出現兩個員工。
從 p 到 q 移動乙個員工,需要花費 c(p,q)。
這個函式不一定對稱,但保證 c(p,p)=0。
給出n個請求,請求發生的位置分別為 p1~pn。
公司必須按順序依次滿足所有請求,且過程中不能去其他額外的位置,目標是最小化公司花費,請你幫忙計算這個最小花費。
輸入格式
第1行有兩個整數l,n,其中l是位置數量,n是請求數量,每個位置從1到l編號。
第2至l+1行每行包含l個非負整數,第i+1行的第j個數表示c(i,j) ,並且它小於2000。
最後一行包含n個整數,是請求列表。
一開始三個服務員分別在位置1,2,3。
輸出格式
輸出乙個整數m,表示最小花費。
資料範圍
3≤l≤200,
1≤n≤1000
輸入樣例:
590
1111
1023
2110
4121
5014
2340
4241
5432
1
輸出樣例:
5
思路:線性動規,具體思路在**注釋
#include
using
namespace std;
#define n 1010
int dp[n]
[201][
201]
;//執行到第i個請求,其他兩個點所在的位置(一共有三個點,但是其中乙個點的位置是確定的,也就是p[i])
int l,n;
int p[n]
;//請求
int w[
201]
[201];
intmain()
}for
(int i=
1;i<=n;i++
)memset
(dp,
0x3f3f3f3f
,sizeof
(dp));
dp[0]
[1][
2]=0
; p[0]
=3;for
(int i=
0;i)//因為此次dp是求出狀態的被依賴狀態,所以要從0開始}}
int ans=
0x3f3f3f3f
;for
(int x=
1;x<=l;x++)}
cout
}
線性DP 274 移動服務
線性dp,肯定以任務為階段 3個人的位置為附屬條件 其中乙個人的位置一定是任務完成的地點,即省去一維 o n l 3 include using namespace std typedef long long ll typedef int128 ll typedef unsigned long lo...
AcWing 274 移動服務 線性DP
乙個公司有三個移動服務員,最初分別在位置1,2,3處。如果某個位置 用乙個整數表示 有乙個請求,那麼公司必須指派某名員工趕到那個地方去。某一時刻只有乙個員工能移動,且不允許在同樣的位置出現兩個員工。從 p 到 q 移動乙個員工,需要花費 c p,q 這個函式不一定對稱,但保證 c p,p 0。給出n...
acwing 274 移動服務(線性dp)
乙個公司有三個移動服務員,最初分別在位置1,2,3處。如果某個位置 用乙個整數表示 有乙個請求,那麼公司必須指派某名員工趕到那個地方去。某一時刻只有乙個員工能移動,且不允許在同樣的位置出現兩個員工。從 p 到 q 移動乙個員工,需要花費 c p,q 這個函式不一定對稱,但保證 c p,p 0。給出n...