1076: [SCOI2008]奖励关|状压动规|概率与期望

来源:互联网 发布:政府财政支出数据 编辑:程序博客网 时间:2024/05/01 12:43

状压一下

f[i][j]表示第i次抛宝物,有j做前提的最大分值

倒推

#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<set>#include<map>#include<algorithm>#include<iostream>using namespace std;double f[101][66666];int v[22],p[22];int K,n;int main(){scanf("%d%d",&K,&n);for(int i=1;i<=n;i++){int x;scanf("%d%d",&v[i],&x);while(x){p[i]+=(1<<x-1);scanf("%d",&x);}}for(int i=K;i;i--){for(int j=0;j<(1<<n);j++){for(int k=1;k<=n;k++){if((j&p[k])==p[k]){f[i][j]+=max(f[i+1][j],f[i+1][j|(1<<k-1)]+v[k]);}else f[i][j]+=f[i+1][j];}f[i][j]/=n;}}printf("%.6lf",f[1][0]);return 0;}



0 0