首页 > 其他 > 详细

CCPC2018吉林赛D题 The Moon(期望dp)

时间:2019-07-16 14:52:16      阅读:78      评论:0      收藏:0      [点我收藏+]

题目链接:http://acm.hdu.edu.cn/contests/contest_show.php?cid=867

当时年少不懂期望dp,时隔一年看到这道题感觉好容易....

定义状态dp[i]表示当前的q值为i时的期望,则当q值为100时dp[100]=100/q,这时后发现转移过程中有1.5这种小数出现,则把空间变为1000,q值也相应扩大10倍。

则转移方程为dp[i]=p/100*(1-q/1000)*dp[min(1000,q+20)]+(1-p/100)*dp[min(1000,q+15)]+1。

最后的答案为dp[20]。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 double dp[1100];
 5 int p;
 6 double dfs(int q) {
 7     if (dp[q] != -1)
 8         return dp[q];
 9     dp[q] = (1.0*p / 100.0)*(1 - 1.0*q / 1000.0) * dfs(min(1000, q + 20)) + (1 - 1.0*p / 100.0)*dfs(min(1000, q + 15)) + 1.0;
10     return dp[q];
11 }
12 int main() {
13     int t, cnt = 1;
14     scanf("%d", &t);
15     while (t--) {
16         scanf("%d", &p);
17         for (int i = 0; i <= 1000; i++)
18             dp[i] = -1;
19         dp[1000] = 100.0 / (p*1.0);
20         printf("Case %d: %.6f\n", cnt++, dfs(20));
21     }
22 }

 

CCPC2018吉林赛D题 The Moon(期望dp)

原文:https://www.cnblogs.com/sainsist/p/11194499.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!