題目描述:
Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz starts at grid 0. For each step he throws a dice(a dice have six faces with equal probability to face up and the numbers on the faces are 1,2,3,4,5,6). When Hzz is at grid i and the dice number is x, he will moves to grid i+x. Hzz finishes the game when i+x is equal to or greater than N.2 0 8 3 2 4 4 5 7 8 0 0
1.1667 2.3441很簡單的概率dp題,幾行代碼搞定,也很容易理解,貼上代碼,算是我的概率DP入門題:
/*******************************************************************************/ /* OS : Linux fc20.x86_64 #1 SMP Tue Dec UTC 2013 x86_64 GNU/Linux * Compiler : 4.8.2 20131212 (Red Hat 4.8.2-7) (GCC) * Encoding : UTF8 * Date : 2014-04-02 * All Rights Reserved by alop. *****************************************************************************/ /* Description: *************************************************************** *****************************************************************************/ /* Analysis: ****************************************************************** *****************************************************************************/ /*****************************************************************************/ #include#include #include #include using namespace std; #define N 100005 int x[N],y[N],mp[N]; double dp[N]; int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); int n,m; while(cin>>n>>m&&(n||m)) { int i=0; memset(mp,-1,sizeof(mp)); memset(dp,0,sizeof(dp)); while(i++ >x[i]>>y[i]; mp[x[i]]=y[i]; } for(i=n-1;i>=0;i--) { if(mp[i]!=-1)dp[i]=dp[mp[i]]; else { for(int j=1;j<=6;j++) dp[i]+=dp[i+j]; dp[i]=dp[i]/6+1; } } printf("%.4f\n",dp[0]); } return 0; }