標籤:blog http io os for sp 2014 on 問題
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3822
記得比賽之前,看到WALK那道機率DP的題,然後就覺得應該可能出機率DP,十一還專門看了以前做的,
現場的時候,真的出了,然後好激動的樣子,開始推得二維,然後感覺好難推,發現n只有50,所以就去推三維,然後發現k<max(i,j)的時候,有無用狀態,無用狀態初始化不會處理,然後覺得好像也用不到,但是感覺更穩的還是去推二維,然後就陷入二維--------悲劇了 最後打鐵,真他媽不爽
也發現了自己的問題:1、平時學的東西掌握的不夠紮實
2、其實如果隊友沒明白自己的意思,完全自己推吧,自信點,別想著必須隊友確認才去做
想要保研牛校或者出國,單單小的競賽還是不夠的,ACM如果不出結果會有很大壓力,估計保牛校無望,我校牛逼的學長學姐,也就是清華或者交大的碩博連讀或者博士,這對於92年出生的我實在不能忍......
還有西安一站,這幾天我會全力最後一搏,下次比賽絕不犯此次比賽的錯誤,如果自己的思路隊友這邊難以溝通,必要的話,就自己堅持自己想自己做,尤其自信點,有很多人其實不像他們想象的那樣強,我自己也不想我想的那麼弱
E[i][j][k] 已經佔據i行j列,走了k步的時候,還需要走的步數的期望,其他看代碼就好
#include <cstdio>#include <cstring>#include <iostream>using namespace std;#define CL(a,b) memset(a,b,sizeof(a))#define IN(s) freopen(s,"r",stdin)const int MAXN = 55;double dp[MAXN][MAXN][MAXN*MAXN];int main(){ //IN("D.txt"); int ncase; scanf("%d",&ncase); int n,m; while(ncase--) { scanf("%d%d",&n,&m); CL(dp,0); for(int i=n;i>=0;i--) for(int j=m;j>=0;j--) { if(i==n&&j==m)continue; for(int k=i*j;k>=max(i,j);k--) { dp[i][j][k]+=1.0*j*(n-i)/(1.0*n*m-k)*dp[i+1][j][k+1]; dp[i][j][k]+=1.0*i*(m-j)/(1.0*n*m-k)*dp[i][j+1][k+1]; dp[i][j][k]+=1.0*(i*j-k)/(1.0*n*m-k)*dp[i][j][k+1]; dp[i][j][k]+=1.0*(n-i)*(m-j)/(1.0*n*m-k)*dp[i+1][j+1][k+1]; dp[i][j][k]+=1.0; } } printf("%.12lf\n",dp[0][0][0]); } return 0;}
ZOJ 3822 機率DP