zoukankan      html  css  js  c++  java
  • UCF Local Programming Contest 2017 G题(dp)

    这道题的意思是给你n个物品,每个物品需要获得c个,单次这个物品获得的概率是p,问你最多有x次机会

    能够获得完这些物品的总概率是多少

    那么我么可以根据这道题推出状态的情况

    前i个物品用j次机会获得概率

    这样我们走两层循环就行,因为每次这个物品只有这次机会选中和没被这次机会选中两种可能

    所以根据这个情况更新一下答案就ok

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<map>
    #include<algorithm>
    #include<queue>
    #include<set>
    #define ull unsigned long long
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pll;
    typedef pair<int,pair<int,int> > plll;
    const int N=1e5+10;
    const int inf=0x3f3f3f3f;
    using namespace std;
    int c[N];
    double p[N];
    double f[2510][10010];
    int main() {
        int t;
        cin>>t;
        while(t--){
            int n;
            vector<double> num;
            int i;
            cin>>n;
            num.push_back(0);
            for(i=1;i<=n;i++){
                cin>>c[i]>>p[i];
            }
            for(i=1;i<=n;i++){
                while(c[i]--){
                    num.push_back(p[i]);
                }
            }
            int m;
            cin>>m;
            int j;
            for(i=0;i<=num.size();i++){
                for(j=0;j<=m;j++){
                    f[i][j]=0;
                }
            }
            f[0][0]=1;
            for(i=1;i<num.size();i++){
                for(j=1;j<=m;j++){
                   f[i][j]+=f[i-1][j-1]*num[i];
                   f[i-1][j]+=f[i-1][j-1]*(1.0-num[i]);
                }
            }
            double res=0;
            int k=num.size()-1;
            for(i=1;i<=m;i++){
                res+=f[k][i];
            }
            printf("%.3f
    ",res);
        }
    }
    View Code
  • 相关阅读:
    快速创建ssm项目
    String 的基础知识点梳理一
    消息中间件ActiveMQ
    log4j.properties
    数据库基础
    pycharm快捷键
    HTML其他标签
    HTML基本标签
    概率论基础2
    概率论基础1
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12670126.html
Copyright © 2011-2022 走看看