大致題意
有m座城市,城市間有p條道路,商人持有n張車票,(張車票對應相應的馬匹數為 ti),需要從城市a前往城市b。兩個直接相連城市花費時間為道路長度除以車票對應馬匹數。求所需最小時間,不可達輸出"impossible"。1<=n<=8, 2<=m<=30。
考慮 「現在所餘車票集合s,目前位於城市v」 的狀態,n範圍較小,s使用狀態壓縮方法表示。記憶化搜尋求解。
#include
#include
#include
#include
#define min(a,b) (((a) < (b)) ? (a) : (b))
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define abs(x) ((x) < 0 ? -(x) : (x))
#define inf 0x3f3f3f3f
#define eps 1e-4
#define m_pi 3.14159265358979323846
#define max_m 30
#define max_n 8
using
namespace std;
int n, m, p, a, b;
int t[max_n]
, cost[max_m]
[max_m]
;double dp[
1<< max_n]
[max_m]
;void
init()
}double
rec(
int s,
int v)}}
return dp[s]
[v]= res;
}void
solve()
double res =
min(inf,
rec(
0, a));
if(res == inf)
printf
("impossible\n");
else
printf
("%.3f\n"
, res);}
intmain()
return0;
}
POJ 2686 狀態壓縮DP
題目鏈結 題目大意 有乙個旅行家計畫旅行,他所在城市有m個城市,在城市之間有p條路徑。從某個城市沿著某條道路到相鄰的城市需要坐馬車,而乘坐馬車需要車票。一張車票只能通過一條路,每張車票都記有馬的數量。從乙個城市到另乙個城市所需要的時間是城市之間道路的長度除以馬的數量的結果。這位旅行家一共有n張車票,...
poj2686 狀態壓縮dp
這個題的意思是給你乙個m個頂點,p條邊的無向圖,現在想從a走到b,旅者也帶有n張車票,每張車票上有一定數量的馬匹數量,經過一條邊必須使用車票,且時間花費是邊的長度除以馬匹數量,問你最少多長時間到達b 我們可以定義狀態dp s u 表示從在u點持有s的車票,那麼下面就可以採用刷表法更新最短路,如下 i...
POJ 2686 列印完數
時間限制 1000ms 記憶體限制 65536kb 描述乙個數如果恰好等於它的因子之和,這個數就成為 完數 例如,6的因子為1 2 3,而6 1 2 3,因此6是 完數 程式設計序列印出1000之內 包括1000 所有的完數,並按如下格式輸出其所有因子 6 its factors are 1,2,3...