php做网站和小程序很好,文本资料分享网站 建设,做的网站如何发布会,如何制作个人网页?VJ地址 中文题意#xff1a; 有一个苦逼程序员小A#xff0c;他有一个女朋友B#xff0c;最近看上了一个游戏#xff0c;他想买这个游戏#xff0c;可是小A是一个怕老婆的人#xff0c;每个 月的工资都需要上交#xff0c;小A找他女朋友商量了好久#xff0c;最后B同意…VJ地址 中文题意 有一个苦逼程序员小A他有一个女朋友B最近看上了一个游戏他想买这个游戏可是小A是一个怕老婆的人每个 月的工资都需要上交小A找他女朋友商量了好久最后B同意他用每个月的工作奖金来买游戏且还需要和B玩智力游戏赢了才能去买游戏具体情况是这样的 步骤1. 先假设小A 赢 小B的几率为 q 2% 步骤2. 这个月小 A 获得工作奖金的几率为 P 步骤3. 如果这个月小 A 获得了工作奖金则转到步骤 4否则转到步骤5 步骤4. 如果小 A 以 q 的胜率赢了小B小A就可以去买游戏了如果没有赢则 q min100 q 2,并转到步骤2 步骤5. 小A 不甘心使得 q min(100%,q1.5%),并转到步骤2进行下一个月 那么请问当你知道小 A 获得奖金几率为 p 的情况下小 A 预期要用几个月才能买到自己的游戏即求 月数 的期望
思路 概率dp dp[i]表示在q的概率等于i的时候A预计要dp[i]个月才能获胜既数学期望那么当i100时dp[i]1/p; 当小于100时 因为1.5是小数不能当下标所以2翻倍处理 dp[i]qi1.0/200.0(赢了)q(1-i1.0/200.0)(dp[min(i4,200)]1)得了工作奖金但是输给B(1-q)*(dp[min(i3,200)]1)没有得到工作奖金;
代码
#include bits/stdc.h
#define lc u 1
#define rc u 1 | 1
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pairint, int pii;
const int N 4e610;
const int inf 0x3f3f3f3f;
const ll INF 0x3f3f3f3f3f3f3f3f;
const ll mod 1e97;
const double eps 1e-8;double dp[210];
int cc;
void solve()
{double q;cinq;q/100;dp[200]1/q;for(int i199;i4;i--){dp[i]q*i*1.0/200.0q*(1-i*1.0/200.0)*(dp[min(i4,200)]1)(1-q)*(dp[min(i3,200)]1);}printf(Case %d: %.9f\n,cc,dp[4]);
}
int main()
{int t;t1;cint;while(t--){solve();}return 0;
}