如何设置网站的关键词,淘宝客优惠券网站建设教程,经典营销案例100例,邮件模板网站题目#xff1a; 有一块宝石#xff0c;1级升2级成功率100#xff05;#xff0c;2级升3级成功率80#xff05;#xff0c;3级升4级成功率60#xff05;#xff0c;4级升5级成功率40#xff05;#xff0c;每次升级失败时降回到1级。请问一块1级宝石升到5级平均要多少…题目 有一块宝石1级升2级成功率1002级升3级成功率803级升4级成功率604级升5级成功率40每次升级失败时降回到1级。请问一块1级宝石升到5级平均要多少次 思路 问题求一块1级宝石升级到5级的期望次数 1、蒙特卡洛模拟试验 考虑一下期望的定义所有的可能的次数*出现该次数的概率之和。出现的次数可能为无穷大但当次数达到一定数量时期望就收敛了因此可以通过概率的模拟试验来实现。 2、有限状态机的概率转移思想 假设dp(i,j)为1级升到5级的平均次数则有以下递推式 dp(1,5) 1.0 * dp(2,5) 0.0 * dp(1,5)1 dp(2,5) 0.8 * dp(3,5) 0.2 * dp(1,5)1 dp(3,5) 0.6 * dp(4,5) 0.4 * dp(1,5)1 dp(4,5) 0.4 * dp(5,5) 0.6 * dp(1,5)1 其中dp(5,5)0; 求解上述方程组得到dp(1,5)即为答案答案为17.0833. 代码 1、蒙特卡洛模拟试验 #include iostream
#include time.h
#include stdlib.h
#include iomanipusing namespace std;bool isUpgrade(double p){double probrand()/(double)(RAND_MAX);if(probp)return true;elsereturn false;
}double ExpectedUpgradeTimes(double *P,int n){const int TIMES100000000;int grade0;int times0;int total0;double expect0;for(int i0;iTIMES;i){grade0;times0;while(grade!n-1){if(isUpgrade(P[grade]))grade;elsegrade0;times;}totaltimes;}expect(double)total/TIMES;return expect;
}int main(){srand((unsigned int)time(NULL));double P[]{1.0,0.8,0.6,0.4};int lensizeof(P)/sizeof(P[0]);double expExpectedUpgradeTimes(P,len1);coutfixedexpendl;cout setprecision(2) exp endl;return 0;
} 2、动态规划 #include iostream
#include time.h
#include stdlib.h
#include iomanipusing namespace std;double ExpectedUpgradeTimes_DP(double *P,int n){double A[n],B[n];double p[n];p[1] 1.0;p[2] 0.8;p[3]0.6;p[4] 0.4;for(int i4;i1;i--){A[i] 1A[i1]*p[i];B[i] p[i]*B[i1]1-p[i];coutA[i] B[i]endl;}double t A[1]/(1-B[1]);return t;
}int main(){srand((unsigned int)time(NULL));double P[]{1.0,0.8,0.6,0.4};int lensizeof(P)/sizeof(P[0]);double expExpectedUpgradeTimes_DP(P,len1);coutfixedexpendl;cout setprecision(2) exp endl;return 0;
} 转载于:https://www.cnblogs.com/AndyJee/p/4755388.html