POJ - 2151 检查问题的困难度 动态规划

博客介绍了如何使用动态规划解决POJ中2151题的问题,涉及到集合数学的概念。通过建立三维状态转移方程dp[i][j][k]来计算第i个队伍前j道题目解出k个的概率,并详细解释了递推过程。在实现算法时需要注意C语言和C++在输出格式上的差异,以避免答案错误。
摘要由CSDN通过智能技术生成

输入数据格式:

问题数M,队伍数T,冠军至少答出N

每个队伍占一行,表示每个题目解出来的概率

组合数学中的集合问题

一个队解出来至少N个题且其他队至少解出来1个题

=每个队至少解1个题-每个队都解了1到N-1个题

动态规划

三维状态转移方程dp[i][j][k]第i个队前j道题解出来k个的概率

递推过程:dp[i][j][k] = dp[i][j-1][k]*(1-p[j-1]) + dp[i][j-1][k-1]*p[j-1]; 第一项表示第j道没有解出来,第二项表示第j道解出来了

注意输出格式三个小数点,C语言保留小数点后几位,不要的直接舍弃,但是C++会四舍五入,所以要用C语言的printf,否则会WA

#include<iostream>

using namespace std;

const int maxT = 1010;
const int maxM = 35;
double dp[maxT][maxM][maxM];
double p[maxM];

int main()
{
    int T,M,N;
    while(cin>>M>>T>>N){
        if(!M&&!T&&!N)break;
        for(int i=0;i<T;i++){
            for(int m=0;m<M;m++)cin>>p[m];
            dp[i][0][0] =1;
            for(int j=1;j<=M;j++)dp[i][j][0] = dp[i][j-1][0]*(1-p[j-1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值