hdu 4576 Robot 概率DP

概率DP,从前往后递推就可以了!!

代码如下:

 

 1 #include<iostream>

 2 #include<stdio.h>

 3 #include<algorithm>

 4 #include<iomanip>

 5 #include<cmath>

 6 #include<cstring>

 7 #include<vector>

 8 using namespace std;

 9 double dp[2][202],ans;

10 int main(){

11     int n,m,t,i,j,k,l,r,w;

12     while(cin>>n>>m>>l>>r){

13         if(n==0&&m==0&&l==0&&r==0) break;

14         memset(dp,0,sizeof(dp));

15         dp[0][0]=1;

16         for(i=1,t=0;i<=m;i++){

17             scanf("%d",&w);

18             w%=n;

19             k=t^1;

20             for(j=0;j<n;j++) dp[k][j]=0;

21             for(j=0;j<n;j++){

22                 if(!dp[t][j]) continue;

23                 dp[k][(n-w+j)%n]+=0.5*dp[t][j];

24                 dp[k][(j+w)%n]+=0.5*dp[t][j];

25             }

26             t=k;

27         }

28         ans=0;

29         for(i=l;i<=r;i++)

30             ans+=dp[t][i-1];

31         printf("%.4lf\n",ans);

32     }

33     return 0;

34 }
View Code

 

 

你可能感兴趣的:(robot)