ZOJ 3640 Help Me Escape

来源:互联网 发布:ubuntu返回桌面快捷键 编辑:程序博客网 时间:2024/05/22 06:55

期望DP, dp[i]表示当前攻击力为i的期望,然后对于每一个攻击力,遍历一下每个Ci,根据是否能逃脱进行转移,具体见代码


代码:

#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int N = 10005;int n, f, c[N];double dp[N];int main() {while (~scanf("%d%d", &n, &f)) {for (int i = 1; i <= n; i++)scanf("%d", &c[i]);     for (int i = 10001; i >= f; i--) {     dp[i] = 0.0;     for (int j = 1; j <= n; j++) {          if (i <= c[j]) {        int to = min(10001, i + c[j]);        dp[i] += (1.0 / n) * (dp[to] + 1);       } else {       dp[i] += (1.0 / n) * floor((1.0 + sqrt(5.0)) / 2 * c[j] * c[j]);          }       }      }       printf("%.3lf\n", dp[f]); }return 0;}


0 0