我们设w[i][s]为当前到第i关,手中的物品为s的时候,期望得分为多少,其中s为二进制表示每种物品是否存在。

  那么就比较容易转移了w[i][s]=(w[i-1][s']+v[j]) *(1/k),其中j为枚举当前关可能出现的物品,s‘为s的子集且s’与s只可能相差第j位的物品,且s'包括j物品的所有前提物品,因为每个物品都是随机出现的,所以乘上出现的概率(1/k),因为我们采取的是最优策略,所以对于每个物品的出现我们还需要和w[i-1][s]取一个max,代表这个物品即使我们能取,也可能不取。

 

  1. /**************************************************************
  2. Problem:
  3. User: BLADEVIL
  4. Language: Pascal
  5. Result: Accepted
  6. Time: ms
  7. Memory: kb
  8. ****************************************************************/
  9.  
  10. //By BLADEVIL
  11. var
  12. n, k :longint;
  13. a :array[..] of longint;
  14. need :array[..] of longint;
  15. w :array[..,..] of extended;
  16. ans :extended;
  17.  
  18. function max(a,b:extended):extended;
  19. begin
  20. if a>b then exit(a) else exit(b);
  21. end;
  22.  
  23. procedure init;
  24. var
  25. i :longint;
  26. y :longint;
  27. begin
  28. readln(n,k);
  29. for i:= to k do
  30. begin
  31. read(a[i]);
  32. y:=;
  33. while y<> do
  34. begin
  35. read(y);
  36. if y<> then need[i]:=need[i] or <<(y-);
  37. end;
  38. end;
  39. end;
  40.  
  41. procedure main;
  42. var
  43. i, j, s :longint;
  44. begin
  45. for i:=n downto do
  46. for s:= to (<<k)- do
  47. for j:= to k do
  48. if need[j] and s=need[j] then
  49. w[i,s]:=w[i,s]+(/k)*max(w[i+,s],w[i+,s or <<(j-)]+a[j]) else
  50. w[i,s]:=w[i,s]+(/k)*w[i+,s];
  51.  
  52. writeln(w[][]::);
  53. end;
  54.  
  55. begin
  56. init;
  57. main;
  58. end.

bzoj 1076 状压DP的更多相关文章

  1. bzoj 1879 状压dp

    879: [Sdoi2009]Bill的挑战 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 852  Solved: 435[Submit][Status ...

  2. bzoj 1087 状压dp

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4130  Solved: 2390[Submit][ ...

  3. BZOJ 2064 - 状压DP

    传送门 题目大意: 给两个数组, 数组中的两个元素可以合并成两元素之和,每个元素都可以分裂成相应的大小,问从数组1变化到数组2至少需要多少步? 题目分析: 看到数据范围\(n<=10\), 显然 ...

  4. BZOJ 4057 状压DP

    思路: 状压一下 就完了... f[i]表示选了的集合为i 转移的时候判一判就好了.. //By SiriusRen #include <cstdio> #include <cstr ...

  5. BZOJ 4565 状压DP

    思路: f[i][j][S]表示从i到j压成S状态 j-m是k-1的倍数 $f[i][j][S<<1]=max(f[i][j][S<<1],f[i][m-1][S]+f[m][ ...

  6. bzoj 1072状压DP

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2293  Solved: 1448[Submit][St ...

  7. bzoj 1072 状压DP

    我们用w[i][j]来表示,i是一个二进制表示我们选取了s中的某些位,j表示这些位%d为j,w[i][j]则表示这样情况下的方案数,那么我们可以得到转移.w[i|(1<<k)][(j*10 ...

  8. bzoj 2669 状压DP

    因为最多有8个'X',所以我们可以用w[i][s]来表示现在我们填了前i个数,填的X的为S,因为每次新加进来的数都不影响前面的最小值,所以我们可以随便添加,这样就有了剩下所有位置的方案,每次都这样转移 ...

  9. BZOJ 1231 状压DP

    思路: f[i][j] i表示集合的组成 j表示选最后一个数 f[i][j]表示能选的方案数 f[i|(1<< k)][k]+=f[i][j]; k不属于i j属于i且符合题意 最后Σf[ ...

随机推荐

  1. 25、react入门教程

    0. React介绍 0.1 什么是React? React(有时称为React.js 或ReactJS)是一个为数据提供渲染HTML视图的开源JavaScript库. 它由FaceBook.Inst ...

  2. webpack实践总结

    一.Loader写法及执行顺序 从webpack2起,loader的格式如下: module: { rules: [ {test: /\.css$/, use: ['style-loader','cs ...

  3. MySQL高可用之PXC安装部署(续)

      Preface       Yesterday I implemented a three-nodes PXC,but there were some errors when proceeding ...

  4. React错误总结(三)

    神坑react native之Cannot Add a child that doesn't have a YogaNode to a parent with out a measure functi ...

  5. day02 智能合约

    上午 1>部署智能合约网络 语法 require 2>利用第三方的节点 同步到以太坊 3>智能合约部署的步骤: 1.查看区块 2.发布合约 deploy后台经历的事情:就是部署合约的 ...

  6. HDU 4725 The Shortest Path in Nya Graph(最短路径)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)

    Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...

  7. Hangman游戏源代码 --- python实现

    #hangman.py from PythonCard import model,dialog import random def find_letters(letter,a_string): loc ...

  8. php 文件上传失败

    使用OSX系统,在使用MAMP Pro作为虚拟服务器,并使用PHP作为后端语言进行文件上传,从临时文件夹拷贝文件的方法为 move_uploaded_file 代码如下: if($_FILES['fi ...

  9. tomcat 路径"/"表示根目录

  10. 服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana

    服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana https://www.cnblogs.com/xishuai/p/elk- ...