【日记】6.13
上午看了看周偉寫的《狀態壓縮》感覺收獲還可以,準備明天上午寫寫題。
下午考試完全是虐的,3道題題目描述一個比一個長。
這里是最后的結果
干凈利落……
?
第一道題,我隱約覺得是dp,但是沒有思路就沒去寫。
第二題是矩陣乘法的思路+高斯消元法,因為上午剛在論文里看到了一段話:
?“給出一個圖的0/1鄰接矩陣G( 允許有自環,兩點間允許有多條路徑,此時G(i,j)表示i 到j 的邊的條數),則從某點i走k步到某點j的路徑數G^k(i,j)”
不得不說我的運氣很好,于是我想到了如果表示的不是邊數而是概率的話,那么G^k(i,j)表示的就應該是本題中的K時間后到達j點的概率,那么第一列放的就是從1出發到每個點的概率,要求的總概率就應該是每個時刻到j點的概率了(包括第1,2,3,4……),這些概率中唯一的區別就是矩陣連乘的次數了,那么可以認為是一個無限遞降等比數列,利用求和公式,知道最后有tot=p/q*(1-M)^(-1)*B 其中M就是這個鄰接矩陣,B是(1,0,0,0……)表示取出第一列,這樣說的話這就算是一個線性的方程組了,可以利用高斯消元法求解。
dotp 1 /** 2 *Prob : dotp 3 *Data : 2012-6-13 4 *Sol : 高斯消元 5 *Author : ZhouHang 6 */ 7 8 #include <cstdio> 9 #include <cstring> 10 #include <iomanip> 11 #include <algorithm> 12 13 #define MaxN 310 14 15 using namespace std; 16 17 int n,i,j,e,y,p,q; 18 int d[MaxN]; 19 bool map[MaxN][MaxN]; 20 double m[MaxN][MaxN],x[MaxN],b[MaxN]; 21 22 void doit() 23 { 24 for (int k=1; k<n; k++) 25 for (int i=k+1; i<=n; i++) 26 { 27 double t=m[i][k]/m[k][k]; 28 for (int j=k+1; j<=n; j++) 29 m[i][j]-=m[k][j]*t; 30 b[i]-=b[k]*t; 31 } 32 33 for (int i=n; i>=1; i--) 34 { 35 double sum=0; 36 for (j=n; j>i; j--) 37 sum+=m[i][j]*x[j]; 38 x[i]=(b[i]-sum)/m[i][i]; 39 } 40 } 41 42 int main() 43 { 44 freopen("dotp.in","r",stdin); 45 freopen("dotp.out","w",stdout); 46 47 48 scanf("%d%d%d%d",&n,&e,&p,&q); 49 double tmp=(double)p/q; 50 51 int u,v; 52 memset(map,false,sizeof(map)); 53 for (int i=1; i<=e; i++) 54 { 55 scanf("%d%d",&u,&v); 56 d[u]++; d[v]++; 57 map[u][v]=true; map[v][u]=true; 58 } 59 60 b[1]=tmp; 61 for (int i=1; i<=n; i++) 62 { 63 m[i][i]=1; 64 for (int j=1; j<=n; j++) 65 if (map[i][j]) m[i][j]=-(1-tmp)/d[j]; 66 } 67 68 doit(); 69 70 for (int i=1; i<=n; i++) 71 printf("%.9lf\n",x[i]); 72 73 fclose(stdin); fclose(stdout); 74 return 0; 75 }?
第三題,如果不輸出方案的話50%很好拿,但是據他們說評測的OJ是沒有插件的,也就是說沒有只看答案,不管方案的那個分,于是我果斷放棄了,到現在還沒有講評,我就先說下自己的做法吧[未知對錯,日后修改……]
個人感覺是個網絡流,把每個點成兩個,中間一條邊流量為1表示只允許存在一頭牛,每個J點拆成3個,一個連源點,如果一個點能到另一個就再連一條邊,每個T點連到匯點上,這樣求個最大流就行了,【不要問我怎么解決離開后可以占據,插圖太麻煩,但是把J拆成3個可以解決這個問題的,具體可以自己琢磨】但是方案不太好查,也沒有去想。
?
總體感覺我選擇第二題是對的、但是真的考試的話我會先去寫第三題的50%,因為果的最大流并不難寫,至于第二題完全是算運氣了,看到了至關重要的一句話……不得不說很奇妙。
?
P.S 我錯了,我懺悔,向老師認錯,向ZSJ認錯、昨天晚自習的時候跟著各位大神浮躁了一個小時……算是釋放下壓力了、不得不說,省實驗dota比我們普及多了。
轉載于:https://www.cnblogs.com/nevergoback/archive/2012/06/14/2548809.html
總結
- 上一篇: 容器内存释放问题(STL新手笔记)
- 下一篇: Ubuntu分别用ibus和scim安装