No.188 - LeetCode808. Soup Servings - 概率数学+dp

  • 因为A和B减少的期望不同,所以随着N无限增大,A先减少到0的概率无限接近于1
  • 题目要求精度为10e-6以内,具体找概率何时精度高于10e-6通过遍历N和dfs打表来看,基本上N>5000就可以。
  • 然后dp思路
  • 有个trick,就是将25作为一个计算单位,可以减少内存使用。
class Solution {
public:
    double soupServings(int N) {
        if(N > 5000) return 1;
        int C = (N+24)/25;
        vector<vector<double> > dp(C+1,vector<double>(C+1,0));
        dp[C][C] = 1;
        for(int i=C;i>=1;--i){
            for(int j=C;j>=1;--j){
                double t = dp[i][j] *0.25;
                if(i>0) dp[max(0,i-4)][j] += t;
                if(i>0&&j>0){
                    dp[max(0,i-3)][max(0,j-1)] += t;
                    dp[max(0,i-2)][max(0,j-2)] += t;
                    dp[max(0,i-1)][max(0,j-3)] += t;
                }
            }
        }
        double ans = dp[0][0] * 0.5;
        for(int i=1;i<=C;++i) ans += dp[0][i];
        return ans;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值