HDU 4576 Robot
阿新 • • 發佈:2019-03-11
size [1] scanf ans clu eof string line cst
思路
概率dp
既然是求概率,順推
顯然有轉移\(dp[i][j]=dp[i-1][j-w]/2+dp[i-1][w]/2\)
然後是環,註意特判一下
環上不要用取模處理循環的情況,會被卡常
代碼
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,m,l,r; double dp[2][400]; int main(){ while(scanf("%d %d %d %d",&n,&m,&l,&r)==4&&n+m+l+r){ memset(dp,0,sizeof(dp)); int now=0; dp[now][1]=1; now^=1; for(int i=1;i<=m;i++,now^=1){ int w; scanf("%d",&w); w%=n; for(int j=1;j<=n;j++) dp[now][j]=(dp[now^1][((j-w)<1)?j-w+n:j-w]+dp[now^1][((j+w)>n)?j+w-n:j+w])/2; } double ans=0.0; for(int i=l;i<=r;i++) ans+=dp[now^1][i]; printf("%.4lf\n",ans); } return 0; }
HDU 4576 Robot