题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2623
题意:求到达存放钥匙的地方,要经过步数的期望。
解题思路:很水的概率DP。
#include <iostream>
#include <iomanip>
#include <memory.h>
using namespace std;
const int MAXN=45+5;
double dp[MAXN][MAXN];
int main()
{
int n;
while(cin>>n&&n)
{
double a,b,c,d,e;
cin>>a>>b;
cin>>c>>d>>e;
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
dp[n][i]=i-1;
for(int i=n-1;i>=1;i--)
{
for(int j=1;j<=i;j++)
{
if(j==1)
dp[i][j]=a*(dp[i+1][j]+1)+b*(dp[i+1][j+1]+1);
else
dp[i][j]=e*(dp[i][j-1]+1)+c*(dp[i+1][j]+1)+d*(dp[i+1][j+1]+1);
}
}
cout<<setiosflags(ios::fixed)<<setprecision(2)<<dp[1][1]<<endl;
}
return 0;
}