時間限制 1000 ms
記憶體限制 65536 kb
明光村迎來了一年一度的盛世——解碼錦標賽,有 2^n 次個隊伍從世界各村趕來參與比賽,編號為 1 - 2^n。賽制為每一輪晉級一半隊伍,按序號大小兩兩比賽,淘汰弱者。一輪結束後,所有的勝者進入下一輪,依舊是按順序兩兩比賽。比如第一輪就是 1 vs 2, 3 vs 4 ... 2^n - 1 vs 2^n。在一旁圍觀的 mays 學姐告訴你,n次比賽後的勝者是唯一的。現在你拿到了乙份各個參賽隊伍的對抗勝率表 win,為 2^n * 2^n 的矩陣, win[i][j] 為一位小數,代表i勝j的概率。
你能告訴 mays 學姐最有可能獲得世界冠軍的是那支隊伍嗎?
多組資料。每組第一行為 n ,n <= 8,接下來 n 行 n 列為對抗勝率矩陣。 保證 win[i][j] + win[j][i] = 1 (i != j)。 以 n=0 結束輸入。
對每組資料,輸出勝率最大的隊伍的序號。如果最大的兩個概率相差不到 0.001,則認為勝率相等,輸出序號最小者。
2
0.0 0.1 0.2 0.3
0.9 0.0 0.4 0.5
0.8 0.6 0.0 0.6
0.7 0.5 0.4 0.0
20.0 0.8 0.1 0.4
0.2 0.0 0.2 0.6
0.9 0.8 0.0 0.3
0.6 0.4 0.7 0.0
0
2
4
賽中提交:null
賽後ac:y
題目大意:
有2的n次方個人伍參加比賽,採用兩兩淘汰晉級制(七龍珠的武道大會),求最後勝率最大的人。
思路:也就是說要決出最終勝者,乙個人一共要打n場比賽。
很明顯這是乙個dfs的題目,在乙個完美二叉樹上做遞迴運算,再加上記憶化搜尋優化時間
遞推式:
dp[i][j]表示第i號選手在第j次比賽中獲勝的概率。
p[i][j]表示第i號選手擊敗第j號選手的概率
dp[i][j]=dp[i][j-1]*segma(dp[k][j-1]*p[i][k]) (k為i在第n次比賽中的兄弟樹的所有最末尾的孫子序號)
下面是ac**:
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define maxn 500
using namespace std;
double dp[maxn][10],p[maxn][maxn];
int n;
const double eps=0.001;
double dfs(int num,int level)
else
}else
}//printf("aaaa%lf\n",sum);
return dp[num][level]=dfs(num,level-1)*sum;
}}int main()
int n=pow(2,n);
for(int i=1;i<=n;i+=1)
}for(int i=1;i<=n;i+=1)}}
double maxp=0,tmp;
int ans=0;
for(int i=1;i<=n;i+=1)
}printf("%d\n",ans);
}return 0;
}
暑期個人賽 第八場 A
a.遊戲 2014新生暑假個人排位賽08 時間限制 1000 ms 記憶體限制 65536 kb 小弱發明了乙個好玩的遊戲,遊戲開始時給你乙個凸多邊形,這個多邊形可以任意旋轉,平移。讓你造出乙個正方形 容器 足夠大 容器的兩邊垂直,兩邊水平。用這個容器把這個多邊形完全包含,且多邊形有且只有一條邊恰好...
暑期個人賽 第五場 D
時間限制 1000 ms 記憶體限制 65536 kb 已知函式f,f 0 f 1 1,對於所有n 2,f n f n 1 f n 2 n。給定n,求f n 第一行乙個整數t,表示組數,t 1000。之後t行每行乙個整數n,0 n 1e9。對於每組測試組,輸出一行f n 1000000007.612...
暑期個人賽 第三場 A
a.學姐的數碼管 2014新生暑假個人排位賽03 時間限制 1000 ms 記憶體限制 65536 kb 題目描述 學姐的七段數碼管玩的出神入化。現在給你乙個浮點數,你需要把它以七段數碼管的形式輸出出來。乙個 2 n 1 n的矩陣來表示七段數碼管,若下標均從0開始,則以第0列的兩個,第n 1列的兩個...