首页 > 其他 > 详细

BZOJ 1076: [SCOI2008]奖励关

时间:2020-02-19 20:18:44      阅读:51      评论:0      收藏:0      [点我收藏+]

期望dp一般逆推,因为终点不确定,而起点确定
那么这道题就可以定义状态
\(f_{i,j}\) 为第 \(i\) 次抛出宝物到结束种类集合为 \(j\) 的期望收益
则答案为 \(f_{0,0}\)
而dp过程就可以从后往前叠加贡献
复杂度 \(O(kn2^n)\)

#include <bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
#define pii pair<int, int>
#define ll long long
#define db double
#define rep(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=b-1;i>=a;i--)
#define Edg int cnt=1,head[N],to[N*2],ne[N*2];void addd(int u,int v){to[++cnt]=v;ne[cnt]=head[u];head[u]=cnt;}void add(int u,int v){addd(u,v);addd(v,u);}
#define Edgc int cnt=1,head[N],to[N*2],ne[N*2],c[N*2];void addd(int u,int v,int w){to[++cnt]=v;ne[cnt]=head[u];c[cnt]=w;head[u]=cnt;}void add(int u,int v,int w){addd(u,v,w);addd(v,u,w);}
#define es(u,i,v) for(int i=head[u],v=to[i];i;i=ne[i],v=to[i])
char buf[1 << 21], *p1 = buf, *p2 = buf;
inline char getc() {
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;
}
inline int _() {
    int x = 0, f = 1; char ch = getc();
    while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getc(); }
    while (ch >= '0' && ch <= '9') { x = x * 10ll + ch - 48; ch = getc(); }
    return x * f;
}

const int N = 107;
const int M = 1 << 15 | 10;
db f[N][M];
int score[N], need[N], k, n;

int main() {
    k = _(), n = _();
    rep(i, 0, n) {
        score[i] = _();
        int t = _();
        while (t) {
            need[i] |= 1 << t - 1;
            t = _();
        }
    }
    per(i, 0, k) {
        rep(j, 0, (1 << n)) {
            rep(z, 0, n) {
                if ((j & need[z]) == need[z])
                    f[i][j] += std::max(f[i + 1][j], f[i + 1][j | (1 << z)] + score[z]);
                else
                    f[i][j] += f[i + 1][j];
            }
            f[i][j] /= (db)n;
        }
    }
    printf("%.6f\n", f[0][0]);
    return 0;
}

BZOJ 1076: [SCOI2008]奖励关

原文:https://www.cnblogs.com/Mrzdtz220/p/12332510.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!