• 天上掉馅饼 期望DP


    C 天上掉馅饼
    文件名 输入文件 输出文件 时间限制 空间限制
    bonus.pas/c/cpp bonus.in bonus.out 1s 128MB
    题目描述
    小 G 进入了一个神奇的世界,在这个世界,天上会掉下一些馅饼。今天,天上
    会随机掉下 k 个馅饼。
    每次天上掉下馅饼,小 G 可以选择吃或者不吃(必须在下一个馅饼掉下来之前
    作出选择,并且现在决定不吃的话以后也不能吃)。
    馅饼有 n 种不同的馅,根据物理定律,天上掉下这 n 种馅饼的概率相同且相互
    独立。然而,每一种馅饼 i 都有一个前提馅饼集合 S i 。只有当 S i 中的馅饼都吃过
    之后,才能吃第 i 种馅饼。比如说,韭菜馅馅饼的 S 中有白菜猪肉馅饼和鲜虾馅饼,
    那么小 G 只有在吃过白菜猪肉馅饼和鲜虾馅饼之后,才能吃韭菜馅的馅饼。
    同时,每个馅饼还有一个美味值 P i 。今天一天小 G 的幸福度,等于小 G 吃到
    的所有馅饼的美味值之和。注意,P i 可能是负数。
    现在考虑,在采用最优策略的前提下,小 G 这一天期望的幸福度是多少?
    输入格式
    第一行两个正整数 k 和 n,表示馅饼的数量和种类。
    以下 n 行,每行若干个数,描述一种馅饼。其中第一个数代表美味值,随后的
    整数表示该馅饼的前提馅饼,以 0 结尾。
    输出格式
    输出一个实数,保留 6 位小数,即在最优策略下期望的幸福度。
    样例输入 1
    1 2
    1 0
    2 0
    样例输出 1
    1.500000
    7
    数据范围
    对于 20% 的数据,所有的馅饼都没有“前提馅饼”
    对于 50% 的数据,1 ≤ k ≤ 10,1 ≤ n ≤ 10
    对于 100% 的数据,1 ≤ k ≤ 100,1 ≤ n ≤ 15,美味度为属于 [−10 6 ,10 6 ] 的整

    其实我只写了10分,

    看了题解才写出来。

    用一个二进制数表示哪些种类的馅饼,从后往前推。

      f[i][j]=max(f[i+1][j],f[i+1][j| (1<<p-1)+w[p]

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    long double f[110][1<<15];
    int w[16],need[16];
    int k,n;
    int main()
    {
        freopen("bonus.in","r",stdin);
        freopen("bonus.out","w",stdout);
        scanf("%d%d",&k,&n);
        for(int i=1,x;i<=n;i++)
        {
            scanf("%d",&w[i]);
            scanf("%d",&x);
            while(x)
            {
                need[i]+=(1<<(x-1));
                scanf("%d",&x);
            }
        }
        for(int i=k;i>=1;i--)
        for(int j=0;j<=(1<<n);j++)
        {
            for(int p=1;p<=n;p++)
            if((j&need[p])==need[p])
                f[i][j]+=max(f[i+1][j],f[i+1][j|(1<<p-1)]+w[p]);
            else f[i][j]+=f[i+1][j];
            f[i][j]/=double(n);
        }
        printf("%.6f",(double)f[1][0]);
        return 0;
    }
  • 相关阅读:
    AppDomain以及如何改变web.config / App.config位置
    事实与谎言 软件工程
    REST WebServices学习
    项目沟通案例:最近项目开发中的扯皮问题
    用户界面设计的技巧与技术(By Scott W.Ambler)
    C#集合类(HashTable, Dictionary, ArrayList)与HashTable线程安全
    About
    Leading by Example
    Pair Programming vs. Code Reviews
    使用jqueryeasyui写的CRUD插件(2)
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7728945.html
Copyright © 2020-2023  润新知