hdu 6558 The Moon (18ccpc吉林D)//记忆化概率dp

http://acm.hdu.edu.cn/showproblem.php?pid=6558

题意:拿到beta pack的期望游戏次数

思路:概率dp,定义dp[i][j],p为i,q为j的时候的期望次数。

dp[i][j]=赢的概率 *(拿到包的概率*1+拿不到包的概率*dp[i][j+2])+输的概率 * (dp[i][j+1.5])

注意

1.5的时候需要hash处理。

注意int转double

注意跳出条件是当q为100时,返回期望次数:1/p(不懂,但是挺对的

注意dp可以初始化为0,因为 if(0.0000001)cout<<1; 是可以输出1的。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define FI first
#define SE second
#define MP make_pair
#define PII pair<int,int>
const LL mod =1e9+7;
const int MX = 2e5+5;
double dp[105][205];
double dfs(int p,int q){
    if(dp[p][q])return dp[p][q];
    if(q==200)return 100/(double)p;//这个期望次数是对的就是了
    dp[p][q]=(double)p/100*((double)q/200*1+(dfs(p,min(q+4,200))+1)*(200-(double)q)/200)+(100-(double)p)/100*(dfs(p,min(200,q+3))+1);
    return dp[p][q];
}
int main(){

    int ca=0;
    int T;cin>>T;while(T--){
        memset(dp,0,sizeof(dp));
        int p;cin>>p;
        printf("Case %d: %.10lf\n",++ca,dfs(p,4));
    }
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值