題意:
初始狀態在0,每次丟骰子[1,6],如果現在在x,丟的骰子數為y,如果x+y>n那麼就還停留在x。
求從0到n所丟骰子次數的期望。
分析:
這題和之前的就更改了一點就是如果現在在x,丟的骰子數為y,如果x+y>n那麼就還停留在x。
那麼我們設dp[i]表示從i到n要丟的骰子次數的期望
那麼
我們設每次有x次的可能留在原地
dp[i] =dp[i]*y/6+dp[i+1]/6+dp[i+2]/6..+1;
然後化簡一下得到dp[i]的公式。
代碼如下:
#include#include #include #include using namespace std; const int maxn = 1e5+10; double dp[maxn]; int main() { int t,n; scanf(%d,&t); while(t--){ scanf(%d,&n); memset(dp,0,sizeof(dp)); for(int i=n-1;i>=0;i--){ int tot=0; double tmp=0; for(int j=1;j<=6;j++){ if(i+j>n) tot++; else tmp+=dp[i+j]/6.0; } //cout<