• 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
  • 相关阅读:
    Prometheus-node-exporter
    Prometheus基础
    普通函数与回调函数的区别
    HTML转义字符大全
    使用 Chrome DevTools 模拟缓慢的 3G 网络速度
    Chrome 浏览器如何修改 User-Agent
    服务器上的 Git
    Mac配置go环境变量
    Linux和Mac环境变量设置
    Cloudflare DNS设置中子域委派不成功的问题
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12670126.html
Copyright © 2020-2023  润新知