Check the difficulty of problems poj2151

來源:互聯網
上載者:User

   一道高中就應該掌握的機率題,卻想了很久而不得其解。不是因為求機率難,而是不知道怎麼用演算法實現。沒想到dp可以如此輕鬆的解決剛開始思想上的種種難關,dp真的很強大啊。(ps:這道題很好,值得認真的做一下!)

 

#include<iostream>#include<cstdio>using namespace std;double team[1001][31];double dp[1001][31][31];//dp[i][j][k]表示第i個隊前j道題做出k道的機率int m,t,n;int main(){int i,j,k;double ans1,ans2,tmp;while(scanf("%d%d%d",&m,&t,&n),m+t+n){for(i=1;i<=t;i++){for(j=1;j<=m;j++)scanf("%lf",&team[i][j]);}for(i=1;i<=t;i++)//初始化做0道的機率{dp[i][0][0]=1.0;for(j=1;j<=m;j++)dp[i][j][0]=(1-team[i][j])*dp[i][j-1][0];}for(i=1;i<=t;i++){for(j=1;j<=m;j++)for(k=1;k<=j;k++)dp[i][j][k]=dp[i][j-1][k-1]*team[i][j]+dp[i][j-1][k]*(1-team[i][j]);}ans1=1.0;//每隊至少做一道的機率for(i=1;i<=t;i++)ans1*=(1-dp[i][m][0]);ans2=1.0;//每隊做1~n-1道的機率for(i=1;i<=t;i++){tmp=0.0;for(j=1;j<n;j++)tmp+=dp[i][m][j];ans2*=tmp;}printf("%.3lf\n",ans1-ans2);}return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.