zoj 2949 - Coins of Luck
阿新 • • 發佈:2017-07-21
size ~~ ble 逆向 pan -m clu 解法 2.0
題目:有2中面條各n碗。每次拋硬幣推斷吃哪一種(到一種吃完為止)。問拋硬幣的數學期望。
分析:動態規劃。概率dp。求出每種結束狀態(即,有一種吃完)的概率,分別乘以步長即為期望。
大黃解法:狀態位剩余的碗數,逆向求解,狀態方程:
DP[ i ][ j ] = (DP[ i-1 ][ j ]+DP[ i ][ j-1 ])/2 + 1 { orz~~ (所有20行代碼就能搞定) }。
說明:(2011-09-27 03:22)。
#include <stdio.h> #include <stdlib.h> double p[ 1002 ][ 1002 ]; double q[ 1002 ]; int main() { for ( int i = 0 ; i <= 1000 ; ++ i ) for ( int j = 0 ; j <= 1000 ; ++ j ) p[ i ][ j ] = 0.0; p[ 0 ][ 0 ] = 1.0; for ( int i = 0 ; i <= 1000 ; ++ i ) for ( int j = 0 ; j <= 1000 ; ++ j ) { p[ i+1 ][ j ] += p[ i ][ j ]*0.5; p[ i ][ j+1 ] += p[ i ][ j ]*0.5; } for ( int i = 1 ; i <= 1000 ; ++ i ) { double sum = p[ i ][ 0 ]*i; for ( int j = i-1 ; j >= 1 ; -- j ) sum += (i+j)*(p[ i ][ j ]-p[ i ][ j-1 ]*0.5); q[ i ] = sum*2.0; } int t,n; while ( scanf("%d",&t) != EOF ) while ( t -- ) { scanf("%d",&n); printf("%.2lf\n",q[ n ]); } return 0; }
zoj 2949 - Coins of Luck