P2473 [SCOI2008]奖励关
——————————————————————————————————————————————————————-
结合状压与期望的一个题,很有意思,结合期望倒推的特点
借用@xyz32768的题解记录一下这个题的倒退思路
——————————————————————————————————————————————————————————————
#include<bits/stdc++.h> using namespace std; int val[80],f[80],a,k,n; double dp[105][(1<<15)+5]; int main() { cin>>k>>n; for(int i=1;i<=n;i++) { cin>>val[i]; while (1) {cin>>a;if(!a)break; f[i]+=(1<<(a-1)); }} for(int i=k;i>=1;i--) for(int j=0;j<(1<<n);j++) { for(int t=1;t<=n;t++) if((j&f[t])==f[t]) dp[i][j]+=max(dp[i+1][j],dp[i+1][j|(1<<(t-1))]+val[t]); else dp[i][j]+=dp[i+1][j]; dp[i][j]/=n; } printf("%.6lf",dp[1][0]); }