概率DP。给你向左和向右走的概率,要求的是走n步到达最远的位置的期望。首先想到的是直接求期望,但是我们会发现,求期望的话没法定义DP的意义,而且我们发现每一种走法最后一定最远距离一定是0-n,这样的话我们可以递推出到达每个点的概率,然后发现二维的话是不可以求出答案的,因为二维我们没办法计算最远距离。于是只好加上一维表示当前最远距离。于是就有了递推式。dp[ i ][ j ][ k ] 表示第 i 步 最远距离为 j 时当前位置 为 k 的概率。最终概率求出来后就很容易算出期望了。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define CLR(a, b) memset(a, b, sizeof(a))
using namespace std;
const int N = 205;
double dp[2][N][N];
int main()
{
int t, n,cas;double L, R, ans;
scanf("%d", &t);
while(t --)
{
scanf("%d%d%lf%lf", &cas, &n, &L, &R);
CLR(dp, 0);dp[0][0][100] = 1;
for(int i = 1; i <= n; i ++)
{
CLR(dp[i&1], 0);
for(int j = 0; j <= i; j ++)
{