0
点赞
收藏
分享

微信扫一扫

ZOJ 3640 Help Me Escape——概率dp

zibianqu 2022-08-17 阅读 72


简单记忆化一下就可以了

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 1e6 + 10;
int n, f;
double c[110], dp[maxn];
double solve(int x) {
if (dp[x] > 0) return dp[x];
for (int i = 1; i <= n; i++) {
int t = (int)((1+sqrt(5))/2*c[i]*c[i]);
if (x > c[i]) {
dp[x] += 1.0 * t / n;
}
else {
dp[x] += (1+solve(x + c[i])) / n;
}
}
return dp[x];
}
int main() {
while (~scanf("%d%d", &n, &f)) {
for (int i = 1; i <= n; i++) scanf("%lf", &c[i]);
memset(dp, 0, sizeof(dp));
printf("%.3f\n", solve(f));
}
return 0;
}

 

举报

相关推荐

0 条评论