AOJ2134 Deadly Dice Game
問題リンク Deadly Dice Game
- 概要
長さNの円形のボードがある。ボードの各マスは黒色か赤色である。
初期位置を任意に選ぶことができる。サイコロを振って出た目の数だけ時計回りに進む。サイコロをT回振ったとき最終的に赤色のマスに停まる確率の最大値を答えよ。
1 <= N <= 2000
1 <= T <= 2000
- 解法
DPです。
dp[i][j]: マスiにいて、サイコロを残りj回振った後赤色に停まる確率
という表を埋めれば解けます。気をつけることは特にないと思います。
- ソース
import java.util.Scanner; //Deadly Dice Game public class AOJ2134 { void run(){ Scanner sc = new Scanner(System.in); for(;;){ int n = sc.nextInt(), T = sc.nextInt(); if((n|T)==0)break; char[] a = sc.next().toCharArray(); double[][] dp = new double[n][2]; for(int i=0;i<n;i++)dp[i][0]=a[i]=='R'?1:0; int x = 1; for(int t=1;t<=T;t++,x=1-x)for(int i=0;i<n;i++){ double p = 0; for(int k=1;k<7;k++)p+=dp[(i+k)%n][1-x]/6; dp[i][x] = p; } double res = 0; for(int i=0;i<n;i++)res= Math.max(res, dp[i][1-x]); System.out.printf("%.9f\n", res); } } public static void main(String[] args) { new AOJ2134().run(); } }