CSUOJ 1009 抛硬币
Description
James得到了一堆有趣的硬幣,于是決定用這些硬幣跟朋友們玩?zhèn)€小游戲。在一個(gè)N行M列的表格上,每一個(gè)第i行第j列的格子上都放有一枚James的硬幣,拋該硬幣正面朝上的概率為Pij,所有拋硬幣事件兩兩之間是相互獨(dú)立的。
現(xiàn)在,玩家在M列硬幣中,從每一列里各選擇1枚,共M枚,構(gòu)成一組。如此重復(fù)選擇N組出來(lái),且保證被選擇過(guò)的硬幣不能再選。選好組之后,每組的M枚硬幣各拋一次,如果都是正面朝上,則該組勝利,總分贏得1分;否則該組失敗,總分不加也不減。請(qǐng)問(wèn),如果讓你自行選擇硬幣的分組,游戲總得分的數(shù)學(xué)期望的最大值是多少?
Input
輸入有多組數(shù)據(jù)。每組數(shù)據(jù)第一行為N和M,1≤N≤100,1≤M≤10,以空格分隔。接下來(lái)有N行,每行M個(gè)小數(shù),表示表格中對(duì)應(yīng)的Pij。
輸入以N=M=0結(jié)束,這組數(shù)據(jù)不輸出結(jié)果。
Output
對(duì)于每組數(shù)據(jù),輸出對(duì)應(yīng)游戲總得分的數(shù)學(xué)期望的最大值,四舍五入精確至4位小數(shù)。每組數(shù)據(jù)的輸出占一行。
Sample Input
2 3 1.0 1.0 1.0 0.5 0.4 0.3 0 0Sample Output
1.0600Hint
計(jì)算期望#include<stdio.h> #include<string> #include<string.h> #include<algorithm> #include<iostream> using namespace std; int m, n; double map[15][110]; int main() {while (~scanf("%d%d", &n, &m)){if (!m && !n)break;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){scanf("%lf", &map[j][i]);//注意這里 i j 的位置}}for (int i = 0; i < m; i++)sort(map[i], map[i] + n);double sum = 0;for (int i = 0; i < n; i++){double cnt = 1;for (int j = 0; j < m; j++)cnt *= map[j][i];sum += cnt;}printf("%.4lf\n", sum);}return 0; }/**********************************************************************Problem: 1009User: leo6033Language: C++Result: ACTime:4 msMemory:2036 kb **********************************************************************/轉(zhuǎn)載于:https://www.cnblogs.com/csu-lmw/p/9124450.html
總結(jié)
以上是生活随笔為你收集整理的CSUOJ 1009 抛硬币的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 使用计算机模拟抛硬币,计算机模拟抛硬币实
- 下一篇: 一个模拟抛硬币的游戏
