這是大黃dp分類裏邊的。。概率dp。。。但是看完之後我決定硬搞。。。。
#include <cstdio> #include <cstring> #include <iostream> #define MAXN 102 using namespace std; double tmp[MAXN][MAXN]; double dp[MAXN][MAXN]; double mpy[MAXN][MAXN]; int n; void init() { double k = 1.0/4.0; for(int i=1;i<n-1;i++) for(int j=1;j<n-1;j++) mpy[i][j] = k; k = 1.0/3.0; for(int i=1;i<n-1;i++) mpy[0][i] =mpy[n-1][i]=mpy[i][n-1]=mpy[i][0]=k; mpy[0][0]=mpy[0][n-1]=mpy[n-1][0]=mpy[n-1][n-1]=0.5; } int main(void) { while(cin>>n) { memset(dp,0.0,sizeof(dp)); dp[n/2][n/2]=1.0; tmp[n/2][n/2]=1.0; init(); double sum = 0; for(int i=0;i<n;i++) // 這是每天; { memcpy(tmp,dp,sizeof(dp)); dp[0][0] = tmp[0][1]/3.0+tmp[1][0]/3.0; dp[n-1][n-1] = tmp[n-1][n-2]/3.0+tmp[n-2][n-1]/3.0; dp[n-1][0] = tmp[n-2][0]/3.0+tmp[n-1][1]/3.0; dp[0][n-1] = tmp[0][n-2]/3.0+tmp[1][n-1]/3.0; for(int k=1;k<n-1;k++) for(int m=1;m<n-1;m++) dp[k][m] = tmp[k][m+1]*mpy[k][m+1]+tmp[k][m-1]*mpy[k][m-1]/ +tmp[k-1][m]*mpy[k-1][m]+tmp[k+1][m]*mpy[k+1][m]; for(int k=1;k<n-1;k++) { dp[0][k] = tmp[1][k]*mpy[1][k]+tmp[0][k+1]*mpy[0][k+1]+tmp[0][k-1]*mpy[0][k-1]; dp[n-1][k]= tmp[n-1][k-1]*mpy[n-1][k-1]+tmp[n-1][k+1]*mpy[n-1][k+1]+tmp[n-2][k]*mpy[n-2][k]; dp[k][n-1]= tmp[k+1][n-1]*mpy[k+1][n-1]+tmp[k-1][n-1]*mpy[k-1][n-1]+tmp[k][n-2]*mpy[k][n-2]; dp[k][0]=tmp[k+1][0]*mpy[k+1][0]+tmp[k-1][0]*mpy[k-1][0]+tmp[k][1]*mpy[k][1]; } sum += dp[n/2][i]; dp[n/2][i] = tmp[n/2][i] = 0.0; } printf("%.4lf/n",sum); } return 0; }
1A,,A之後又整了這個。。。
#include<stdio.h> double ans[49] = { 0.6667, 0.0000, 0.4074, 0.0000, 0.3361, 0.0000, 0.2928, 0.0000, 0.2629, 0.0000, 0.2407, 0.0000, 0.2233, 0.0000, 0.2092, 0.0000, 0.1975, 0.0000, 0.1875, 0.0000, 0.1789, 0.0000, 0.1714, 0.0000, 0.1648, 0.0000, 0.1589, 0.0000, 0.1536, 0.0000, 0.1487, 0.0000, 0.1443, 0.0000, 0.1403, 0.0000, 0.1366, 0.0000, 0.1332, 0.0000, 0.1300, 0.0000, 0.1270, 0.0000, 0.1243, 0.0000, 0.1217, 0.0000, 0.1192 }; int main(void) { int n; while (scanf("%d", &n) != EOF) { printf("%.4lf/n", ans[(n-3)/2]); } return 0; }
數數 時間限制:3000 ms | 內存限制:65535 KB 難度:2 描述 我們平時數數都是喜歡從左向右數的,但是我們的小白同學最近聽說德國人數數和我們有些不同,他們正好和我們相反,是從右向左數的。因此當他看到123時
A problem is easy 時間限制:1000 ms | 內存限制:65535 KB 難度:3 描述 When Teddy was a child , he was always thinking about s
HDU6354 Everything Has Changed 多校第五場 幾何題 愛德華是鋁循環機械的工人。他的工作是操作機械臂來切割設計模型。以下是他的工作簡介。 假設操作平面爲二維座標系。首先,有一個帶中心座標的圓盤(0 ,
題目描述: 給出圖中一些點的連通關係,判斷任意圖中兩個點是否能從u到v或者v到u。 大致思路: 思路還是先用強連通縮點,之後對於這個圖進行拓撲排序,如果在排序過程中出現並列搜索的點了,也就是說這個子圖中有多個起點,也就是說一定存在(u,v
C++STL泛型編程 ANSI C++中包含了一個C++ STL(Standard Template Library),即C++標準模板庫,又稱C++泛型庫,它在std命名空間中定義了常 用的數據結構和算法,使用起來很方便。 STL提供三
題意:給出一些城市的座標,每個信號基站可以覆蓋兩個相鄰的點,問最少要建多少個基站。 思路:我們要儘可能多的建立能覆蓋兩個城市的基站(二分匹配最大匹配),剩下的城市每個城市建立一個基站。先求出最大匹 配數k。n
題意:有N只奶牛,奶牛有自己認爲最受歡迎的奶牛。奶牛們的這種“認爲”是單向可傳遞的,當A認爲B最受歡迎(B不一定認爲A最受歡迎),且B認爲C最受歡迎時,A一定也認爲C最受歡迎。現在給出M對這樣的“認爲...”的關係,問有多少隻奶牛被除其本
題意:有n個人每個人可以把謠言傳給一些人,傳給每個人有一定的時間,求出你把謠言傳給誰,讓所有的人都知道的時間最短。 思路:枚舉每個點爲起點,到所有點的距離的最大值就是該點爲起點所消耗的時間,求出最小值就可以了,因爲給的n較小,直接
題意:給出n個卡車,每個卡車的類型是七個字符組成的,一種卡車可以從另一種卡車派生來的,代價是兩種卡車間類型不同字符的個數,求出這n中卡車派生的最小代價,n種車有一 種是開始就有的,n-1種是派生出來的。 思路:因爲剛開始有一種卡車,所以就
題意:給出n個字母的一些大小關係,判斷能否拓撲排序或者出現了矛盾,如果是這兩種情況要求出到第幾組關係時就可以得到。否 則就是所給數據不完全。 思路:每讀一組關係進行一次拓撲排序,如果排序成功或者出現矛盾記錄第幾組關係
最近在做最短路徑的題目,有幾道題是同一個類型的,題意基本都是尋找從A到B所有路徑中,路徑的最大邊的最小值。這樣類型的題有POJ - 2253 Frogger, UVA - 10048 Audiophobia,POJ - 1797
POJ2386 Lake Counting 和 2018年藍橋杯I題 全球變暖 都屬於深搜的同一種類型的題,都與計數有關,比較有共同點和舉一反三的感覺所以放在一起討論一下。 POJ2386 Lake Counting 題目大意:
暢通工程續 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 41691
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s)