CSUOJ 1009 抛硬币
生活随笔
收集整理的這篇文章主要介紹了
CSUOJ 1009 抛硬币
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
James得到了一堆有趣的硬幣,于是決定用這些硬幣跟朋友們玩個小游戲。在一個N行M列的表格上,每一個第i行第j列的格子上都放有一枚James的硬幣,拋該硬幣正面朝上的概率為Pij,所有拋硬幣事件兩兩之間是相互獨立的。
現在,玩家在M列硬幣中,從每一列里各選擇1枚,共M枚,構成一組。如此重復選擇N組出來,且保證被選擇過的硬幣不能再選。選好組之后,每組的M枚硬幣各拋一次,如果都是正面朝上,則該組勝利,總分贏得1分;否則該組失敗,總分不加也不減。請問,如果讓你自行選擇硬幣的分組,游戲總得分的數學期望的最大值是多少?
Input
輸入有多組數據。每組數據第一行為N和M,1≤N≤100,1≤M≤10,以空格分隔。接下來有N行,每行M個小數,表示表格中對應的Pij。
輸入以N=M=0結束,這組數據不輸出結果。
Output
對于每組數據,輸出對應游戲總得分的數學期望的最大值,四舍五入精確至4位小數。每組數據的輸出占一行。
Sample Input
2 3 1.0 1.0 1.0 0.5 0.4 0.3 0 0Sample Output
1.0600Hint
計算期望#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 **********************************************************************/轉載于:https://www.cnblogs.com/csu-lmw/p/9124450.html
總結
以上是生活随笔為你收集整理的CSUOJ 1009 抛硬币的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用计算机模拟抛硬币,计算机模拟抛硬币实
- 下一篇: 一个模拟抛硬币的游戏