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

 

 

posted @ 2013-08-10 18:44  _随心所欲_  阅读(225)  评论(0编辑  收藏  举报