程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 簡單概率DP——hdu4405

簡單概率DP——hdu4405

編輯:C++入門知識

題目描述:

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.

There are also M flight lines on the chess map. The i-th flight line can help Hzz fly from grid Xi to Yi (0
Please help Hzz calculate the expected dice throwing times to finish the game.

Input There are multiple test cases.
Each test case contains several lines.
The first line contains two integers N(1≤N≤100000) and M(0≤M≤1000).
Then M lines follow, each line contains two integers Xi,Yi(1≤Xi The input end with N=0, M=0.

Output For each test case in the input, you should output a line indicating the expected dice throwing times. Output should be rounded to 4 digits after decimal point.

Sample Input
2 0
8 3
2 4
4 5
7 8
0 0

Sample Output
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;
}




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved