51nod1705 七星劍(成環DP)

2021-08-21 14:17:51 字數 1503 閱讀 6847

點此看題面

大致題意:你要把一把劍從0星公升至7星,有n顆寶石供你選擇,第i顆寶石的價值是c[i],用第i顆寶石將劍從k-1星公升至k星的成功率是prob[k][i],而失敗後會掉lose[k][i],要你求出將劍公升至7星的期望花費。

題解看到這題,自然而然地就會想到用動態規劃來做,而轉移方程其實也很好推:

f[i]

=min

(f[i]

,f[i-1]

+c[j]+(

1-prob[i]

[j])

*(f[i]

-f[i-

1-lose[i]

[j])

);

其中f[i]表示將劍公升至i星的期望花費

就這麼簡單?

b ut

wait

amin

ute.

..

but\ wait\ a\ minute...

butwai

tami

nute

...

在轉移方程中左邊和右邊同時出現了f[i

]f[i]

f[i]

!這就是傳說中的成環dpdp

dp

那麼成環dpdp

dp該怎麼做呢?

其實在這道題目中有乙個很簡單的方法:移項。沒錯,就是我們初一上學期就接觸過的移項。

通過移項,原轉移方程就變成了

f[i]

=min

(f[i]

,(f[i-1]

+c[j]-(

1-prob[i]

[j])

*f[i-

1-lose[i]

[j]]

)/prob[i]

[j])

;

這樣不就直接水過了嗎!(順便吐槽一下n

≤100

n≤100

n≤10

0這樣的資料範圍真是太水了)

**

#include

#define ll long long

#define min(x,y) ((x)<(y)?(x):(y))

#define n 100

using

namespace std;

int n,c[n+5]

,lose[10]

[n+5];

double prob[10]

[n+5

],f[10]

;int

read()

intmain

(register

int i,

register

int j,

bool flag,

bool ff)

51nod 1705七星劍 期望dp

分析 一開始覺得可以正推,但是怎麼都是wa。不得已看正解,高斯消元?我當時就覺得肯定可以線性做,然後真讓我找到了。f i 表示有i顆星的期望花費 f i minf i 1 cj 1 pi,j f i f gi,j 這個dp比較顯然了,直接做,時間複雜度n 7.include include incl...

有什麼作用 粉水晶七星陣有什麼作用

粉水晶一直是轉運文玩水晶中的佼佼者,除了一些粉水晶掛件還有一些擺件,比如粉水晶球,粉文玩水晶七星陣。這些擺件造型不一但功能相差不大,在此我們介紹下不太常見的粉水晶七星陣及其作用。粉水晶七星陣有什麼作用?粉水晶七星陣其實就是七科小的粉水晶的擺件,簡單大方,美觀,可以當做辦公室或者臥室的裝飾品,而更重要...

sae php7 mysql 第七星塵的獨立部落格

原文分割線 here comes my removemysql.通過介面實現跨資料庫訪問。removemysql只適合小型開發,資料量大的時候,會嚴重受網路環境制約,可能會延遲很厲害。所以建議做小應用,不宜用於大應用環境。大應用建議自己寫個完善的rest server,或者換個支援傳統方式訪問資料庫...