送外賣 狀壓DP

2022-05-11 02:02:14 字數 1622 閱讀 9378

題目描述 description

有乙個送外賣的,他手上有n

份訂單,他要把

n份東西,分別送達

n個不同的客戶的手上。

n個不同的客戶分別在

1~n個編號的城市中。送外賣的從

0號城市出發,然後

n個城市都要走一次(乙個城市可以走多次),最後還要回到

0點(他的單位),請問最短時間是多少。現在已知任意兩個城市的直接通路的時間。

輸入描述 input description

輸入檔案meal.in

的第一行乙個正整數n (

1<=n<=15

)接下來是乙個(n+1

)*(n+1)

的矩陣,矩陣中的數均為不超過

10000

的正整數。矩陣的i行

j列表示第

i-1號城市和

j-1號城市之間直接通路的時間。當然城市

a到城市

b的直接通路時間和城市

b到城市

a的直接通路時間不一定相同,也就是說道路都是單向的。

輸出描述 output description

輸出檔案meal.out

僅有乙個正整數表示最少花費的時間

樣例輸入 sample input

0 1 10 10

1 0 1 2

10 1 0 10

10 2 10 0

樣例輸出 sample output

資料範圍及提示 data size & hint

50%的資料

1 <= n <= 10

100%的資料1 <= n <= 15

和售貨員的難題幾乎沒區別,就是首先floyd了一下。

**:

#include#include

#include

#include

#include

#define ll long long

#define il inline

#define db double

#define replace(a , b) (a ^ (1 << b-1))

#define get(a , b) ((a >> b-1) & 1)

#define min(a , b) ((a) < (b) ? (a) : (b))

using

namespace

std;

il int

gi()

while(ch>='

0'&&ch<='9'

)

return x*y;

}int n,m,f[1

<<21][21],r[21][21],ans=2e9,s;

intmain()}}

for(int i=2;i<=n;i++)

ans=min(ans,f[m][i]+r[i][1

]); printf(

"%d\n

",ans);

return0;

}

Codevs 2800 送外賣 狀壓DP

2800 送外賣 時間限制 2 s 空間限制 256000 kb 題目等級 鑽石 diamond 題目描述 description 有乙個送外賣的,他手上有n份訂單,他要把n份東西,分別送達n個不同的客戶的手上。n個不同的客戶分別在1 n個編號的城市中。送外賣的從0號城市出發,然後n個城市都要走一次...

CodeVS2800 送外賣 最短路 狀壓DP

首先求出各點之間的最短路,floyed即可,注意是0 n。然後考慮狀壓,f i j 表示狀態為i時訪問j點時的最短路和,1表示訪問,0表示未訪問,然後第j個點所在的位置就是 1 f i j min f i j f i 1 p表示列舉每個點,i 1 1 include 2 include 3 incl...

(狀壓dp)codevs2800 送外賣

時間限制 2 s 空間限制 256000 kb 題目等級 鑽石 diamond 題解 檢視執行結果 回到問題 總耗時 201 ms 0 0 資料通過測試.最近的錯誤點資訊 執行結果 測試點 1.in結果 ac 記憶體使用量 256kb 時間使用量 1ms 測試點 10.in結果 ac 記憶體使用量 ...