274 移動服務

2021-10-18 07:14:37 字數 1394 閱讀 6625

乙個公司有三個移動服務員,最初分別在位置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...