• 洛谷 P2473 [SCOI2008]奖励关 ( 期望DP )


    题目链接

    题意 : 中文题、点链接

    分析 :

    第一道有关概率期望的DP

    有个大部分情况下通用的结论

    概率正推、期望反推

    原因不明、其实是没有查到较好的解释

    这题由于有一些取物品的先决条件在这里

    而且观察到题目 n 并不是很大

    果断选择状压来解决

    这题定义 dp[i][j] 到第 i 回合、拿过物品状态为 j 的情况的最优值是什么

    转移的时候、第一维倒序枚举回合、第二维枚举状态、然后第三维枚举每个物品

    如果当前状态包含了当前枚举到的物品的先决物品的话

    则有转移 dp[i][j] += max( dp[i+1][j]、dp[i+1][j | (1<<k)] + val[k] ) / n

    否则 dp[i][j] += dp[i+1][j] / n

    #include<bits/stdc++.h>
    using namespace std;
    
    double dp[105][(1<<16) + 10];
    int Pre_State[20], val[20];
    
    int main(void)
    {
        int Times, n;
        scanf("%d %d", &Times, &n);
    
        for(int i=1; i<=n; i++){
            scanf("%d", &val[i]);
            int pre;
            while(~scanf("%d", &pre) && pre){
                Pre_State[i] |= (1<<pre);
            }
        }
    
        for(int i=Times-1; i>=0; i--){
            for(int s=0; s<(1<<(n+1)); s++){
                for(int j=1; j<=n; j++){
                    if((s & Pre_State[j]) == Pre_State[j]){
                        dp[i][s] += max(dp[i+1][s], dp[i+1][s | (1<<j)] + val[j]) / n;
                    }else dp[i][s] += dp[i+1][s] / n;
                }
            }
        }
    
        printf("%.6lf
    ", dp[0][0]);
    
        return 0;
    }
    View Code
  • 相关阅读:
    LeetCode—-Sort List
    LeetCode——Longest Consecutive Sequence
    LeetCode——single-number系列
    freeswitch源码阅读 之 sofia模块
    freeswitch 内核模块开发
    FreeSwitch B2B 状态转换流程
    freeswitch嵌入python脚本
    freeswitch注册过程分析
    freeswitch对接其它SIP设备
    freeswitch模块之event_socket
  • 原文地址:https://www.cnblogs.com/qwertiLH/p/9543516.html
Copyright © 2020-2023  润新知