青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

ZJU 2494 Coins of Luck

 

題目鏈接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2949
題目描述:

 

Luck is the key to life. When I have to decide something, I will make my decision by flipping a coin. And then, I have two things to do. First, I have the decision made. Second, I go to the nearest church and donate the coin.

But there are always too many things I have to decide. For example, what should I eat today for lunch? OK, now we are talking about a decision, so let us assume that I have two kinds of food: quick-served noodle A and quick-served noodle B.

I just have bought N bowls of noodle A and N bowls of noodle B. If I have some space to make a decision (i.e. having two kinds of quick-served noodle to choose from), then I will flip a coin to decide which kind of noodle to eat.

My question is, before I eat up all 2 * N bowls of quick-served noodle, what is the mathematical expectation of the number of coins I will have to donate.

Input

Standard input will contain multiple test cases. The first line of the input is a single integer T (1 <= T <= 1000) which is the number of test cases. And it will be followed by T consecutive test cases.

Each test case contains an integer N (1 <= N <= 1000).

Output

Results should be directed to standard output. The output of each test case should be a single real number, which is the mathematical expectation of the number of coins I have to donate. The result should be accurate to two digits after the fractional point.

Sample Input

2
1
2

 

Sample Output

1.00
2.50
 
該題目的思路很明確,就是概率題,嘗試了兩種解法,一種是用遞推,另一種是直接利用組合公式
遞推法:
//solution 1
以P[i][j]表示狀態(tài), i代表A種面條剩下的數(shù)量,j代表B種面條的數(shù)量。
P[i][j] = P[i - 1][j] * 0.5 + P[i][j - 1] * 0.5 (i - 1 != 0 && j - 1 != 0, i為0或者j為0則為終結(jié)態(tài))
Result = 
 
#include <iostream>
#include 
<queue>
#include 
<cmath>
using namespace std;
#define MAXN 1100
double P[MAXN][MAXN];




    
double dVal;
double dResult[MAXN + 100];

int main()
{

    
int iCaseTimes;
    
int k, i, j;
    
double dVal;


    scanf(
"%d"&iCaseTimes);
    
for(k = 0; k < iCaseTimes; k++)
    
{
        scanf(
"%d"&iNum);
        dRet 
= 0;
        P[iNum 
+ 1][iNum] = 1;
        P[iNum][iNum 
+ 1= 1;
        
for(i = iNum; i >= 0; i--)
        
{
            
for(j = iNum; j >= 0; j--)
            
{
                
if(i + 1 >= 1 && j >= 1)
                    P[i][j] 
+= P[i + 1][j] * 0.5;
                
if(i >= 1 && j + 1 >= 1)
                    P[i][j] 
+= P[i][j + 1* 0.5;
                
if(i == 0 || j == 0)
                
{
                    dRet 
+= P[i][j] * (iNum * 2 - i - j);
                }

            }

        }


        
        printf(
"%.2lf\n", dRet);
    }

    
return 0;
}
很明顯,算上總的Case數(shù)量,這種方法的時(shí)間復(fù)雜度為O(n^3), 所以,超時(shí)是必然的
這時(shí)轉(zhuǎn)換下思路,想想能不能一下子就把1000規(guī)模的打好表呢?在上述表示情況下,打表是不行的,因?yàn)槊看芜M(jìn)行計(jì)算的時(shí)候,都需要將P[iNum][iNum]
設(shè)置為概率1,所以,當(dāng)直接打好1000的規(guī)模,其子問題仍然沒法計(jì)算出來。
//solution 2
換一狀態(tài)表示方法
我們令P[i][j]來代表狀態(tài),其中的i, j代表A類面條吃了i碗,B類面條吃了j碗,這樣我們可以這樣得到答案:
 
再觀察這時(shí)候的子結(jié)構(gòu),假設(shè)先計(jì)算好規(guī)模為1000的表,此時(shí)的輸入為iNum,我們可以看到,到數(shù)量為iNum - 1的結(jié)果都是對(duì)的,而數(shù)量為iNum的結(jié)果
是錯(cuò)誤的,因?yàn)?000大于iNum,在1000的規(guī)模下,到iNum時(shí)沒有進(jìn)行終結(jié),而當(dāng)單類面條吃到iNum碗時(shí),應(yīng)該是結(jié)束態(tài),所以,我們只能利用到規(guī)模為
iNum - 1數(shù)量的結(jié)果,并利用其推出最后答案。
//solution 1 O(n^2)
#include <iostream>
#include 
<cmath>
using namespace std;
#define MAXN 1100

double dRet[MAXN][MAXN];

int main()
{
    
int i, j;
    
int iNum, iCaseTimes;
    
double dResult;

    memset(dRet, 
0sizeof(dRet));
    dRet[
0][0= 1;
    
for(i = 0; i <= 1000; i++)
    
{
        
for(j = 0; j <= 1000; j++)
        
{
            
if(i == 0 && j == 0continue;
            
if(i - 1 >= 0)
                dRet[i][j] 
+= dRet[i - 1][j] * 0.5;
            
if(j - 1 >= 0)
                dRet[i][j] 
+= dRet[i][j - 1* 0.5;
            
//dRet[i][j] += 1;
        }

    }


    scanf(
"%d"&iCaseTimes);
    
while(iCaseTimes--)
    
{
        scanf(
"%d"&iNum);
        dResult 
= 0;

        
for(i = 0; i <= iNum - 1; i++)
        
{
            dResult 
+= dRet[iNum - 1][i] * (iNum + i) * 0.5;
        }

        dResult 
*= 2;
        printf(
"%.2lf\n", dResult);
    }

    
return 0;
}
 假如直接利用組合公式能否計(jì)算呢?
因?yàn)樵撌录l(fā)生的概率不是等可能事件,也就是說,假設(shè)有2 * iNum 碗面條,2 ^ (iNum + 1)并不是其樣本空間,因?yàn)槠渲幸恍┬蛄惺遣豢赡馨l(fā)生的
那么假設(shè)拋硬幣事件一定發(fā)生(有點(diǎn)像條件概率,我具體想不明白:( ), 那么,可以得到下面的公式:
總的樣本空間為2^K,因?yàn)閽伭薑次硬幣,每次兩種選擇;而在這長(zhǎng)度為K的串中,最后一碗必定是固定的(肯定為吃完的那種),
所以只要在剩下的K - 1碗中選出iNum - 1個(gè)位置便可。乘以二代表有兩類面條吃完的對(duì)稱情況,乘以K是轉(zhuǎn)換成期望。
//solution 2 O(n^2)
#include <iostream>
using namespace std;
#define MAXN 2100

double C[MAXN][MAXN - 1000];

int main()
{
    
int i, j;

    memset(C, 
0sizeof(C));
    C[
0][0= 0.5;
    C[
1][0= 0.25;
    C[
1][1= 0.25;
    
for(i = 2; i <= 2000; i++)
    
{
        C[i][
0= C[i - 1][0/ 2.0;
        
for(j = 1; j <= 1000; j++)
        
{
            C[i][j] 
= (C[i - 1][j] + C[i - 1][j - 1]) / 2.0;
        }

    }

    
    
int iNum;
    
int iN;
    
double dRetVal;
    
    scanf(
"%d"&iNum);
    
while(iNum--)
    
{
        scanf(
"%d"&iN);
        dRetVal 
= 0;
        
for(i = iN; i <= iN * 2 - 1; i++)
        
{
            dRetVal 
+= C[i - 1][iN - 1* i;
        }

        printf(
"%.2lf\n", dRetVal * 2);
    }

    
return 0;
}
主要的思路是將組合數(shù)進(jìn)行打表,更需要注意的是將2^k次也融入到整個(gè)組合數(shù)的表中,也就是說,在利用楊輝三角進(jìn)行遞推的時(shí)候就將除二操作加進(jìn)去。
這里要注意double類型的精度問題,由于題目只要求精確到小數(shù)兩位,所以利用double還是可以滿足的。
對(duì)于上述方法,雖然時(shí)間復(fù)雜度是O(n^2),但是其空間復(fù)雜度也為O(n^2),觀察到每?jī)蓚€(gè)f(K)函數(shù)之間也有遞推關(guān)系,我們只要計(jì)算出第一個(gè)之后,再
乘上一個(gè)式子,除以一個(gè)式子,就可以得到下一個(gè)值,所以,再實(shí)現(xiàn)一個(gè)空間復(fù)雜度更小的O(n^2)的方法:
 
//solution 3
#include <iostream>
using namespace std;

int main()
{
    
int i, j;
    
    
int iNum;
    
int iN;
    
double dRetVal;
    
double dPreVal;
    
double dStartValue;
    
    scanf(
"%d"&iNum);
    
while(iNum--)
    
{
        scanf(
"%d"&iN);
        dRetVal 
= 0;
        dStartValue 
= 1;
        
//(iN - 1, iN - 1) 
        for(i = iN; i >= 1; i--) dStartValue /= 2.0;
        
        dRetVal 
= dStartValue * iN;
        dPreVal 
= dStartValue;
        
for(i = iN + 1; i <= iN * 2 - 1; i++)
        
{
            dRetVal 
+= (double) dPreVal * (i - 1/ (i - iN) * i / 2;
            dPreVal 
= dPreVal * (i - 1/ ((i - iN) * 2);
        }

        printf(
"%.2lf\n", dRetVal * 2);
    }

    
return 0;
}

通過對(duì)該題的解決,可以看到,概率類的題目基本上兩個(gè)方向:1.直接用組合公式解決。但是這種方法容易產(chǎn)生精度問題,而且不一定能夠簡(jiǎn)單的推出來
2.用遞推公式解決。這種方法比較容易想清楚方法,但是面臨的問題便是時(shí)間與空間的限制。

posted on 2009-03-08 19:32 Philip85517 閱讀(1094) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導(dǎo)航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統(tǒng)計(jì)

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情综合| 欧美电影专区| 亚洲第一毛片| 久久久夜精品| 国外视频精品毛片| 韩国欧美一区| 亚洲国产天堂网精品网站| 亚洲第一区在线观看| 亚洲精品乱码久久久久久| 99在线精品视频| 香蕉久久夜色| 免费欧美在线| 亚洲精品五月天| 亚洲欧美中文另类| 麻豆精品在线播放| 欧美日韩一区二区三区免费看| 国产精品久久国产精麻豆99网站| 国产欧美日韩三级| 最新国产精品拍自在线播放| 亚洲一区二区三区中文字幕| 久久全国免费视频| 亚洲六月丁香色婷婷综合久久| 亚洲欧美精品在线| 免费观看不卡av| 国产精品青草综合久久久久99| 激情懂色av一区av二区av| 亚洲性感美女99在线| 美女精品网站| 亚洲欧美日韩国产| 欧美日韩精品欧美日韩精品一| 国产一区二区黄色| 亚洲综合精品| 亚洲人被黑人高潮完整版| 久久国产精品一区二区| 国产精品国产三级欧美二区| 亚洲人成高清| 欧美sm视频| 久久高清一区| 国产欧美日韩高清| 亚洲曰本av电影| 亚洲欧洲一区二区三区| 久久久久国产精品一区| 国产精品久久一区二区三区| 99国产精品久久| 欧美暴力喷水在线| 久久精品亚洲国产奇米99| 国产欧美91| 欧美亚洲在线视频| 一区二区精品国产| 欧美伦理影院| 99天天综合性| 亚洲人成小说网站色在线| 久久伊人精品天天| 亚洲国产高清视频| 欧美激情网友自拍| 欧美成人国产| 日韩天堂av| 日韩视频在线观看一区二区| 欧美了一区在线观看| 一本久久a久久免费精品不卡 | 国产精品国产成人国产三级| 一区二区av| 欧美黑人一区二区三区| 久热re这里精品视频在线6| 国产午夜精品久久| 欧美专区18| 欧美一区成人| 伊人夜夜躁av伊人久久| 欧美成人精品高清在线播放| 欧美va亚洲va香蕉在线| 亚洲精品一二| 一本久道久久综合中文字幕| 国产精品久久久久久影院8一贰佰| 午夜欧美不卡精品aaaaa| 亚洲自拍另类| 在线观看欧美激情| 亚洲高清视频一区| 欧美激情在线狂野欧美精品| 在线亚洲+欧美+日本专区| 亚洲在线国产日韩欧美| 国产综合欧美| 欧美激情精品久久久久| 欧美日韩国产精品一区二区亚洲| 亚洲综合国产激情另类一区| 久久不射网站| 99在线精品视频| 欧美一区二粉嫩精品国产一线天| 激情国产一区| 亚洲精品日日夜夜| 国产伦精品一区二区三区在线观看| 久久久蜜桃一区二区人| 欧美激情一区二区三区成人| 亚洲免费婷婷| 久久字幕精品一区| 亚洲一区二区免费视频| 久久久亚洲影院你懂的| 一区二区三区视频免费在线观看| 亚洲欧美国产日韩中文字幕 | 亚洲欧美视频在线观看| 久久精品三级| 亚洲免费在线电影| 蜜桃av噜噜一区| 亚洲欧美一区二区三区极速播放| 久久午夜精品一区二区| 亚洲视频在线观看一区| 久久成人免费日本黄色| 亚洲视频国产视频| 久久九九精品99国产精品| 亚洲自拍电影| 欧美国产丝袜视频| 久久精品国产99国产精品澳门| 欧美精品首页| 欧美激情第二页| 国内精品一区二区| 亚洲欧美一区二区三区极速播放 | 久久久久久久久久久成人| 嫩草国产精品入口| 久久久久久久高潮| 国产精品一区二区在线观看不卡| 亚洲人午夜精品| 亚洲大胆美女视频| 国产精品久久久久7777婷婷| 欧美三级在线播放| 欧美日韩中文字幕在线| 美腿丝袜亚洲色图| 欧美搞黄网站| 欧美日韩中文| 国内视频一区| 亚洲欧洲在线观看| 亚洲综合导航| 久热精品视频在线观看一区| 久久影院午夜片一区| 日韩视频精品在线| 久久精品国产精品亚洲精品| 久久一区中文字幕| 国产精品免费一区豆花| 在线精品一区| 欧美一区二区视频在线观看2020| 久久久中精品2020中文| 亚洲精品中文字幕在线| 中日韩在线视频| 欧美精品自拍偷拍动漫精品| 国产日韩欧美综合精品| 制服诱惑一区二区| 亚洲高清不卡在线| 久久成人免费电影| 国产精品亚洲综合天堂夜夜| 亚洲麻豆一区| 亚洲经典一区| 欧美风情在线| 亚洲欧洲精品一区二区三区| 久久aⅴ乱码一区二区三区| 亚洲巨乳在线| 欧美午夜电影网| 亚洲影视在线播放| 亚洲视频欧美在线| 国产精品国产三级国产普通话三级 | 久久久久久9| 亚洲欧美在线磁力| 国产色产综合色产在线视频| 午夜精品久久久| 久久成人国产精品| 最新成人av在线| 9久草视频在线视频精品| 国产精品久久久久久久久久久久| 亚洲视频中文字幕| 欧美一二三区精品| **性色生活片久久毛片| 欧美成人tv| 欧美视频在线观看免费网址| 久久久www成人免费毛片麻豆 | 久久不射中文字幕| 欧美亚洲视频在线看网址| 亚洲国产人成综合网站| 在线亚洲一区二区| 亚洲电影在线看| 亚洲午夜在线视频| 亚洲精品乱码久久久久久蜜桃麻豆 | 一本久久a久久免费精品不卡| 日韩一区二区久久| 一区二区视频在线观看| 亚洲视频专区在线| 亚洲精选视频免费看| 久久精品国产精品亚洲| 亚洲欧美日韩精品在线| 蜜乳av另类精品一区二区| 久久精品国产99精品国产亚洲性色| 欧美成年人网| 亚洲二区在线| 亚洲精品久久久久久久久久久久| 先锋a资源在线看亚洲| 亚洲永久视频| 国产精品盗摄久久久| 99国产精品久久久| 久久精品国产亚洲5555| 久久av红桃一区二区小说| 国产精品视频网| 久久国产精品久久国产精品| 久久成人18免费观看| 国产亚洲精品高潮|