LightOJ 1030 - Discovering Gold (期望dp)

題意:1*n的迷宮,剛開始在1的位置,你有一個骰(這個字居然念tou。。。漲知識了)子,你每次前進骰子的數。

每個位置還有金子的個數求到n時的金子的期望,走到迷宮外時重新骰。

dp【n】=a【i】,dp【i】=dp【i+1】/6+dp【i+2】/6+dp【i+3】/6+dp【i+4】/6+dp【i+5】/6+dp【i+6】/6+a【i】。

不足6的,到n-i停止。

#include<stdio.h>
#include<iostream>
using namespace std;
double a[106];
double dp[106];
int main()
{
	int t;
	cin>>t;int o=0;
	while(t--)
	{
		int n;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
			dp[i]=0;
		}
		
		dp[n]=a[n];
		for(int i=n-1;i>=1;i--)
		{
			if(n-i>=6)
			{
				dp[i]=dp[i+1]/6+dp[i+2]/6+dp[i+3]/6+dp[i+4]/6+dp[i+5]/6+dp[i+6]/6+a[i];
			}
			else
			{
				for(int j=1;j<=n-i;j++)
				dp[i]+=dp[i+j]/(n-i);
				dp[i]+=a[i];
			}
		}
		printf("Case %d: %.6lf\n",++o,dp[1]);
	}
	return 0;
 } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章