zoukankan      html  css  js  c++  java
  • bzoj1076 [SCOI2008]奖励关

    [SCOI2008]奖励关

    Time Limit: 10 Sec Memory Limit: 128 MB

    Description

      你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物,
    每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。
    宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1次系统都抛出宝物1(
    这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n。 获取第i种宝物将得到Pi
    分,但并不是每种宝物都是可以随意获取的。第i种宝物有一个前提宝物集合Si。只有当Si中所有宝物都至少吃过
    一次,才能吃第i种宝物(如果系统抛出了一个目前不能吃的宝物,相当于白白的损失了一次机会)。注意,Pi可
    以是负数,但如果它是很多高分宝物的前提,损失短期利益而吃掉这个负分宝物将获得更大的长期利益。 假设你
    采取最优策略,平均情况你一共能在奖励关得到多少分值?

    Input

      第一行为两个正整数k和n,即宝物的数量和种类。以下n行分别描述一种宝物,其中第一个整数代表分值,随
    后的整数依次代表该宝物的各个前提宝物(各宝物编号为1到n),以0结尾。

    Output

      输出一个实数,保留六位小数,即在最优策略下平均情况的得分。

    Sample Input

    1 2
    1 0
    2 0

    Sample Output

    1.500000

    HINT

    【数据规模】
    1<=k<=100,1<=n<=15,分值为[-106,106]内的整数。

    这道题是状压dp啊,只是在期望的基础上。。。。
    感觉所有的最优策略都是期望尽量大啊。。。
    再次谴责这种最强大脑玩游戏。。。
    每个操作分为两种情况,能选或不能选。
    如果能选,那么看选的期望和不选的期望谁跟优。
    日常倒着求期望。。。

    
    #include<bits/stdc++.h>
    using namespace std;
    double dp[105][32777];
    int w[105], p[105];
    int k, n, x, ld;
    
    inline void putit()
    {
    	scanf("%d%d", &k, &n);
    	for(int i = 1; i <= n; ++i)
    	{
    		scanf("%d", &w[i]);
    		for(;;)
    		{
    			scanf("%d", &x);
    			if(!x) break;
    			p[i] |= (1 << (x - 1));
    		}
    	}
    	ld = (1 << n);
    }
    
    inline void workk()
    {
    	for(int j = k; j >= 1; --j)
    	{
    		for(int i = 0; i < ld; ++i)
    		{
    			for(int t = 1; t <= n; ++t)
    			{
    				if((p[t] & i) == p[t])
    				{
    					dp[j][i] += max(dp[j + 1][i | (1 << (t - 1))] + w[t], dp[j + 1][i]);
    				}
    				else dp[j][i] += dp[j + 1][i];
    			}
    			dp[j][i] /= n;
    		}
    	}
    }
    
    int main()
    {
    	putit();
    	workk();
    	printf("%.6lf", dp[1][0]);
    	return 0;
    } 
    
    
    心如花木,向阳而生。
  • 相关阅读:
    SharePoint 2010 User Profile Sync Service自动停止
    如何区别多个svchost.exe?
    Log Parser分析IIS log的一个简单例子
    Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
    Windows中右键点击文件夹, 结果找不到共享选项卡, 怎么办?
    介绍SOS中的SaveModule命令
    SharePoint中Draft版本的文档不会收到document added的Alert Email
    和我一起学Windows Workflow Foundation(1)创建和调试一个WF实例
    门户网站
    C#基础—— check、lock、using语句归纳
  • 原文地址:https://www.cnblogs.com/LLppdd/p/8615093.html
Copyright © 2011-2022 走看看