动态规划-最后剩下的是红糖的概率问题

来源:互联网 发布:电脑装机必备软件 编辑:程序博客网 时间:2024/04/30 19:34

google面试原题: 有m个红糖,n个白糖,每次取一颗糖,如果取到红糖,直接吃掉,如果取到白糖则放进去再取一颗,再取的这一颗无论是什么颜色都吃掉。问最后剩下的那颗是红糖的概率。这题是用动态规划做的,从m=1, n=0  m=1, n=1开始推,能找出一个状态转移方程(也就是代码里面那个p[i][j] = xxxx 的式子)


上代码:

#include <iostream>#include <vector>using namespace std;double get_prob(int m, int n, vector<vector<double>> &p) {for(int i=1; i<=m; i++) {for(int j=1; j<=n; j++) {p[i][j] = (double)i/(i+j)*p[i-1][j] //fetch one red  + ((double)j/(i+j)) //fetch one white   * ( ((double)i/(i+j)) * p[i-1][j] //then, fetch one red  + ((double)j/(i+j)) * p[i][j-1] ); //or, fetch one white}}return p[m][n];}int main() {int m, n;m = 2;n = 1;vector<vector<double>> prob(m+1, vector<double>(n+1, 0.0));//when white candy is 0, red candy is from 1 to m, the probability is 1for(int i=1; i<=m; i++) {prob[i][0] = 1.0;}cout << get_prob(m, n, prob) << endl;return 0;}




0 0
原创粉丝点击