奖励关

看到数据范围,想到状压,那问题就是如何设计方程

设\(dp[i][j]\)表示在第\(i\)轮的时候,状态为\(j\)时的最优策略所拿的分值,\(j\)的二进制下为1的位置,表示选了这个宝物,如果\(i\)是顺着推的话,可能会出现在第\(i\)轮的时候,无法到达\(j\)这个状态的情况,所以倒着推\(i\),

考虑两种情况

当不能选这个宝物时

\[dp[i]][j]\;+= dp[i+1][j]
\]

当能选这个宝物时,则两种选择,选或不选

\[dp[i][j]\;+=\max(dp[i+1][j],dp[i+1][j|(1<<(k-1))]+v[k])
\]

因为求的是期望,所以记得 \(dp[i][j]\;/=n\)

Code:

#include<cstdio>
#define MAX 16
#define re register
namespace OMA
{
int K,n,top;
int v[MAX],s[MAX];
double dp[MAX*7][1<<MAX];
inline int read()
{
int s=0,w=1; char ch=getchar();
while(ch<'0'||ch>'9'){ if(ch=='-')w=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); }
return s*w;
}
void in()
{
K=read(),top = (1<<(n=read()))-1;
for(re int i=1; i<=n; i++)
{
v[i] = read();
for(re int j=1; j; j++)
{
int si=read();
if(!si)
{ break; }
s[i] |= 1<<(si-1);
}
}
}
inline double max(double a,double b)
{ return a>b?a:b; }
signed main()
{
in();
for(re int i=K; i>=1; i--)
{
for(re int j=0; j<=top; j++)
{
for(re int k=1; k<=n; k++)
{
if((j&s[k])==s[k])
{ dp[i][j] += max(dp[i+1][j],dp[i+1][j|(1<<(k-1))]+v[k]); }
else
{ dp[i][j] +=dp[i+1][j]; }
}
dp[i][j] /= n;
}
}
printf("%.6lf\n",dp[1][0]);
return 0;
}
}
signed main()
{ return OMA::main(); }

最新文章

  1. microstrip patch antenna
  2. Java连接SqlServer2008数据库(转)
  3. How to Make Terrains in Tiled Map Editor
  4. C#协变和逆变
  5. css 去除标签默认样式
  6. AssetBundle依赖关系
  7. POJ 1679 The Unique MST (次小生成树)
  8. Linux进程IPC
  9. Unicode 字符集及UTF-8 UTF-16编码
  10. strdup函数的使用方法
  11. CSS3 实现六边形Div图片展示效果
  12. HTML5文件操作API
  13. 程序员必须搞清的概念-equals和=和hashcode的区别
  14. 《java入门第一季》之面向对象(重头戏继承来了)
  15. C++11标准中常用到的各种算法汇总.
  16. Spring(四)使用注解注入Bean
  17. HDU 4687 Boke and Tsukkomi (一般图最大匹配)【带花树】
  18. linux日志管理
  19. Django具体操作(四)
  20. Python文件读写及网站显示

热门文章

  1. bugku--cookie欺骗
  2. abp知识
  3. CTF-OldDriver-writeup
  4. C语言:case详解
  5. Ajax爬取动态数据和HTTPS自动默认证书
  6. Linux服务器相关性能的命令
  7. 排列组合的实现(js描述)
  8. centos7下安装、配置Nginx、设置Nginx开机自启动
  9. 技术期刊 &#183; 天光台高未百尺 | Uber 工程师的 JS 算法课;大数据时代的个人隐私;设计师的 Github;告别 PPT 工程师;从零开始实现的像素画
  10. CF833B-线段树优化DP