售貨員的難題(codevs 2596)

2022-05-14 18:47:45 字數 1222 閱讀 7406

題目描述 description

某鄉有n個村莊(1輸入描述 input description

村莊數n和各村之間的路程(均是整數)

輸出描述 output description

最短的路程

樣例輸入 sample input

0 2 1

1 0 2

2 1 0

樣例輸出 sample output

資料範圍及提示 data size & hint

本題可用最短路思想、搜尋來解決,但是可能無法通過一組極限資料(且效率較低)。建議按樹狀dp考慮!

/*

不會什麼樹形dp,我做的是spfa(其實floyed就可以)+深搜+剪枝

首先將邊反向,spfa處理所有點到1的距離,以備剪枝使用

然後深搜得到答案

剪枝:利用spfa得到的距離,當當前的dis+(n-t)*minn+f[x]>ans時,剪枝

(minn是矩陣中的最短距離,n-t是還有幾步可以遍歷完所有的村莊)

*/#include

#include

#include

#include

#define m 20

#define inf 3000000

using

namespace

std;

int map[m][m],f[m],n,ans=inf,min1=inf;

inta2[m][m];

bool

vis[m];

queue

q;intread()

while(c>='

0'&&c<='9')

return num*flag;

}void dfs(int x,int t,int

dis)

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

if(!vis[i])

}void

spfa()}}

}int

main()

spfa();

memset(vis,

0,sizeof

(vis));

vis[

1]=1

; dfs(

1,1,0

); printf("%d

",ans);

return0;

}

view code

售貨員的難題

售貨員的難題 5000 ms 65535 kb 675 3441 tags 動態規劃 某鄉有n個村莊 1 n 20 有乙個售貨員,他要到各個村莊去售貨,各村莊之間的路程s 0 s 1000 是已知的,且a村到b村與b村到a村的路大多不同。為了提高效率,他從商店出發到每個村莊一次,然後返回商店所在的村...

售貨員的難題

售貨員的難題 5000 ms 65535 kb 675 3441 tags 動態規劃 某鄉有n個村莊 1 n 20 有乙個售貨員,他要到各個村莊去售貨,各村莊之間的路程s 0 s 1000 是已知的,且a村到b村與b村到a村的路大多不同。為了提高效率,他從商店出發到每個村莊一次,然後返回商店所在的村...

售貨員的難題

某鄉有n個村莊 1 n 20 有乙個售貨員,他要到各個村莊去售貨,各村莊之間的路程s 0 s 1000 是已知的,且a村到b村與b村到a村的路大多不同。為了提高效率,他從商店出發到每個村莊一次,然後返回商店所在的村,假設商店所在的村莊為 1,他不知道選擇什麼樣的路線才能使所走的路程最短。請你幫他選擇...