题解:P12717 [Algo Beat Contest 002 D] Distance of Trip
weifengzhaomi · · 题解
思路:
看完题目后,应该都能知道这是一道 DP 题。
设状态
设
设转移
如果当前位置为
则有转移状态:
接下来,枚举每个位置,求出到这个位置的概率,最后求和就可以了。
代码:
#include<bits/stdc++.h>
using namespace std;
double dp[210][210][210],ans;
int n;
signed main(){
scanf("%d",&n),dp[0][0][0] = 1;
for (int i = 1;i <= n;i++)
for (int j = 0;j <= n;j++)
for (int k = 0;k <= n;k++){
if (j > 0) dp[j][k][i] += dp[j - 1][k][i - 1];
if (k > 0) dp[j][k][i] += dp[j][k - 1][i - 1];
if (j > 0 && k > 0) dp[j][k][i] += dp[j - 1][k - 1][i - 1];
dp[j][k][i] /= 3.0;
}
for (int i = 0;i <= n;i++)
for (int j = 0;j <= n;j++) ans += dp[i][j][n] * sqrt(i * i + j * j);
printf("%.9lf\n",ans);
}