BZOJ1076: [SCOI2008]奖励关
来源:互联网 发布:淘宝店铺更换类目影响 编辑:程序博客网 时间:2024/04/27 13:56
BZOJ1076: [SCOI2008]奖励关
状压Dp
题解:
http://blog.csdn.net/PoPoQQQ/article/details/43454337
对于这种最优策略的期望DP 我们一般都是从后往前推
枚举每次出现宝物 枚举此时的状态 枚举宝物是哪种
如果当前的宝物可以吃 就在吃与不吃的后继状态中选择最大值加到当前状态上
如果当前的宝物不能吃 只能选择不吃的后继状态加到当前状态上
最后输出f[1][0]
就是答案
为什么一定要从后往前推呢?因为从前往后边界不好设啊。
Code:
#include <iostream>#include <cstring>#include <cstdio>#define D(x) cout<<#x<<" = "<<x<<" "#define E cout<<endlusing namespace std;int k,n,pre[20],w[20];double f[105][1<<15];int main(){ freopen("a.in","r",stdin); cin>>k>>n; for(int i=1;i<=n;i++){ cin>>w[i]; int x; while(cin>>x && x){ pre[i]|=1<<(x-1); } } for(int i=k;i;i--){ for(int S=0;S<(1<<n);S++){ for(int x=1;x<=n;x++){ if((S&pre[x])==pre[x]){ f[i][S]+=max(f[i+1][S|(1<<(x-1))]+w[x],f[i+1][S])/n; } else { f[i][S]+=f[i+1][S]/n; } }// D(i); D(S); D(f[i][S]); E; } } printf("%.6f\n",f[1][0]);}
阅读全文
0 0
- scoi2008奖励关&&bzoj1076
- scoi2008奖励关&&bzoj1076
- BZOJ1076: [SCOI2008]奖励关
- [BZOJ1076] [SCOI2008]奖励关
- bzoj1076: [SCOI2008]奖励关
- bzoj1076【SCOI2008】奖励关
- BZOJ1076 [SCOI2008]奖励关
- bzoj1076: [SCOI2008]奖励关
- bzoj1076: [SCOI2008]奖励关
- 【SCOI2008】bzoj1076奖励关
- 【BZOJ1076】【SCOI2008】奖励关
- 【bzoj1076】[SCOI2008]奖励关
- bzoj1076 [SCOI2008]奖励关
- BZOJ1076: [SCOI2008]奖励关
- bzoj1076[SCOI2008]奖励关
- BZOJ1076 [SCOI2008]奖励关
- bzoj1076: [SCOI2008]奖励关 压状dp
- 【bzoj1076】【SCOI2008】【奖励关】【状压dp】
- PCL:遇到的一些问题及解决方案
- SOC-FPGA交叉编译环境搭建
- 将数组分成m个子数组,使子数组和的最大值最小
- 双倍回文 HYSBZ
- OpenSSL命令系列
- BZOJ1076: [SCOI2008]奖励关
- 配置Druid Monitor
- UVa 11742
- window下Oracle自动备份数据库脚本(非归档模式)
- C++ SOCKET通信模型(一)select
- 请求授权(Authorize Requests)
- openlayers3+中实现点选、圈选、多边形选择点要素
- 常用居中方法
- js forEach不能break