這題很容易想到轉移方程式,問題是我們發現第三維如果開2000,會炸
但是我們進一步發現,沒必要開2000,因為總共就200個任務,所以揹包容量和減少的量的差值最多-200-200
然後平移一下就是0-400.之後就是dfs轉移,另外,double型別不要用memset轉移
#includeusingview codenamespace
std;
double f[205][205][410
];double p[210
];int a[205
];int
l,n,k;
double dfs(int u,int x,int
k)
if(f[u][x][k]!=-1
)
return
f[u][x][k];
double ans=0
;
if(a[u]!=-1
)
else
return f[u][x][k]=ans;
}int
main()
}for(i=1;i<=n;i++)
for(i=1;i<=n;i++)
printf(
"%.6f\n
",dfs(1,0,n+min(n,k)));
}
數學,DP AcWing 232 守衛者的挑戰
這題看起來不難然而一堆細節。首先不難看出這是乙個類似於揹包的 dp 問題。考慮狀態的設計 f i,j,k 表示當前考慮到第 i 個挑戰,當前揹包剩餘容量為 j 前 i 個挑戰中已經成功了 k 個。那麼我們可以進一步寫出轉移方程 接下來就是細節問題了 約定 v 為地圖殘片的數量。problem 守衛者...
守衛者的挑戰
題目描述 隊員們被傳送到了乙個擂台上,最初身邊有乙個容量為k的包包。擂台賽一共有項挑戰,各項挑戰依次進行。第項挑戰有乙個屬性ai,如果ai 0,表示這次挑戰成功後可以再獲得乙個容量為ai的包包 如果ai 1,則表示這次挑戰成功後可以得到乙個大小為1的地圖殘片。地圖殘片必須裝在包包裡才能帶出擂台,包包...
守衛者的挑戰
初始值為 k 現經過一段數,有 p i 的概率加上第 i 個數 a i 問最後值 geq0 且加了 l 個數的概率。注意到 k 200 都是沒有意義的,於是可以把 k 的範圍視為 0 leq k leq200 直接設 f i j k 表示處理了第 1 i 個數,加了 j 個數,值為 k 的概率。決策...