[BZOJ 1076][SCOI2008]奖励关:状压DP
2017-04-17 19:59
405 查看
点击这里查看原题
f[i][j]表示到第i次,吃完后状态为j的期望,则f[i][j]=上一步的期望+这一步的得分/n。
为了方便整理答案,使用倒推,答案即为f[1][0]。
f[i][j]表示到第i次,吃完后状态为j的期望,则f[i][j]=上一步的期望+这一步的得分/n。
为了方便整理答案,使用倒推,答案即为f[1][0]。
/* User:Small Language:C++ Problem No.:1076 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int M=(1<<15)+5; int k,n,d[16],p[16],v[16]; double f[101][M]; int main(){ freopen("data.in","r",stdin);// p[1]=1; for(int i=2;i<=16;i++) p[i]=p[i-1]<<1; scanf("%d%d",&k,&n); for(int i=1;i<=n;i++){ scanf("%d",&v[i]); int x; while(scanf("%d",&x)==1&&x) d[i]|=p[x]; } for(int i=k;i;i--){ for(int j=0;j<p[n+1];j++){ for(int t=1;t<=n;t++){ if((d[t]&j)==d[t]) f[i][j]+=max(f[i+1][j],f[i+1][j|p[t]]+v[t]); else f[i][j]+=f[i+1][j]; } f[i][j]/=n; } } printf("%.6lf",f[1][0]); return 0; }
相关文章推荐
- BZOJ 1076: [SCOI2008]奖励关 [DP 期望 状压]
- [BZOJ1076][SCOI2008]奖励关(状压DP)
- 【BZOJ1076】【SCOI2008】奖励关(DP、期望、状压)
- BZOJ 1076: [SCOI2008]奖励关 状压,期望DP
- [BZOJ1076][SCOI2008]奖励关 状压dp
- 【bzoj1076】[SCOI2008]奖励关 状压DP
- BZOJ_1076_[SCOI2008]奖励关_状压DP
- [bzoj1076][SCOI2008]奖励关 状压DP
- BZOJ 1076 [SCOI2008]奖励关 状压+期望DP 题解
- bzoj1076 [SCOI2008]奖励关 状压+期望dp
- BZOJ 1076 SCOI2008 奖励关 期望状压DP
- bzoj 1076: [SCOI2008]奖励关【状压dp+概率dp】
- BZOJ 1076: [SCOI2008]奖励关(期望+状压DP)
- BZOJ 1076: [SCOI2008]奖励关(概率+dp)
- 【BZOJ1076】【SCOI2008】奖励关(期望+状压dp)
- 【bzoj1076】【SCOI2008】【奖励关】期望最优值dp
- bzoj 1076: [SCOI2008]奖励关 期望dp+状态压缩
- BZOJ 1076([SCOI2008]奖励关-期望dp-从后向前)
- bzoj 1076: [SCOI2008]奖励关 (期望dp)
- 【BZOJ1076】[SCOI2008]奖励关【期望DP】【状压DP】