CTSC2011 幸福路徑

2022-05-22 20:03:09 字數 1052 閱讀 9237

給定⼀張有向圖,每個點有個權值,螞蟻從某個點開始,初始體⼒為1,每經過⼀條邊,體⼒會變為原來的p(0$n \leq 100,點權 \leq 100$

sol:

正解是自動機的幫浦引理,一看就不可做,考慮暴力碾標算

由於點權不超過 100,體力很小的時候點權的貢獻也很小,保留一位小數就會把很小的貢獻捨去

做乙個 dp

設 $f_$ 表示走了 $i$ 步,從 $j$ 走到 $k$ 的最大收益

那麼 $f_ = max_\,j,l)} + f_,l,k)} \times p^}\}$

多做幾遍就行了

#include #define ll long long

#define db long double

#define rep(i, s, t) for (register int i = (s), i##end = (t); i <= i##end; ++i)

#define dwn(i, s, t) for (register int i = (s), i##end = (t); i >= i##end; --i)

using

namespace

std;

inline

intread()

const

int maxn = 110

;int

n, m, st;

db ans, p, f[maxn][maxn], g[maxn][maxn], w[maxn];

intmain()

cin >>st;

double

x; cin >>x;

p =x;

rep(i,

1, m)

for (; p > (db)(1e-8); p *=p)

rep(i,

1, n) ans =max(ans, f[st][i]);

double res = ans +w[st];

printf(

"%.1f\n

", res);

}

view code

CTSC2011 幸福路徑

有向圖 g有n個頂點 1,2,n,點i 的權值為 w i 現在有乙隻螞蟻,從 給定的起點 v0出發,沿著圖 g 的邊爬行。開始時,它的體力為 1。每爬過一條 邊,它的體力都會下降為原來的 倍,其中 是乙個給定的小於1的正常數。而 螞蟻爬到某個頂點時的幸福度,是它當時的體力與該點權值的乘積。我們把螞蟻...

bzoj 2306 Ctsc2011 幸福路徑

有向圖 g有n個頂點 1,2,n,點i 的權值為 w i 現在有乙隻螞蟻,從 給定的起點 v0出發,沿著圖 g 的邊爬行。開始時,它的體力為 1。每爬過一條邊,它的體力都 p,而螞蟻爬到某個頂點時的幸福度,是它當時的體力與該點權值的乘積。求最大幸福值。因為當體力很小後,對答案就沒什麼影響力,所以用乙...

bzoj2306 Ctsc2011 幸福路徑

有向圖 g有n個頂點 1,2,n,點i 的權值為 w i 現在有乙隻螞蟻,從給定的起點 v0出發,沿著圖 g 的邊爬行。開始時,它的體力為 1。每爬過一條邊,它的體力都會下降為原來的 倍,其中 是乙個給定的小於1的正常數。而螞蟻爬到某個頂點時的幸福度,是它當時的體力與該點權值的乘積。我們把螞蟻在爬行...