一道很新颖的概率DP,我看数据范围还以为是有指数级别的复杂度的呢

记得有人说期望要倒着推,但放在这道题上,就咕咕了吧。

我们考虑正着概率DP,设\(fi\)表示将剑升到\(i\)颗星花费的期望,这样我们可以得出转移:

  • \(f_i=f_i+f_{i-1}+c_i\) (期望的线性性质,因为无论如何我这\(c_i\)的代价是一定要花的(无论成功与否))
  • \(f_i=f_i+(f_i-f_{i-lose_{i,j}-1})\cdot(1-prob_{i,j})\)(表示失败降过星之后在通过各种情况(这个之前已经计算过了)再爬上来)

然后乍一看很成功,但是这个转移有个致命的问题:在转移2中,式子两边同时出现了\(f_i\)

这就是传说中的成环DP了,比较通用的方法是利用图论的哲学操作消去这个情况,但我太弱了所以不会

但在这里有一种说出来吓死你的智障方法——移项

我们连立两个方程,然后将2中的\(f_i\times (1-prob_{i,j})\)移过去即可得到:

\(f_i=\frac{(f_{i-1}+c_j-(1-prob_{i,j})\cdot f_{i-1-lose_{i,j}})}{prob[i][j]}\)

然后就可以直接\(O(7n)\)的DP了,这个复杂度是假的吧

最后注意一下无解的情况要特判

CODE

#include<cstdio>
using namespace std;
typedef double DB;
const int N=105;
const DB EPS=1e-6,INF=1e99;
int c[N],n,lose[10][N];
DB p[10][N],f[10],ans;
bool flag=0;
inline void miner(DB &x,DB y)
{
if (x>y+EPS) x=y;
}
int main()
{
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
register int i,j; scanf("%d",&n);
for (i=1;i<=n;++i) scanf("%d",&c[i]);
for (i=1;i<=7;++i)
{
for (flag=0,j=1;j<=n;++j)
scanf("%lf",&p[i][j]),flag|=p[i][j]>EPS;
if (!flag) return puts("-1"),0;
}
for (i=1;i<=7;++i)
for (j=1;j<=n;++j)
scanf("%d",&lose[i][j]);
for (i=1,f[1]=INF;i<=7;++i,f[i]=INF)
for (j=1;j<=n;++j)
if (p[i][j]>EPS) miner(f[i],(DB)(f[i-1]+c[j]-(1-p[i][j])*f[i-1-lose[i][j]])/p[i][j]);
printf("%.9lf",f[7]);
return 0;
}

51Nod 1705 七星剑的更多相关文章

  1. ●51NOD 1705 七星剑

    题链: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1705题解: 期望dp,期望的线性性质 (首先对于第k颗星,一定只 ...

  2. 51NOD 1705 七星剑 [DP 期望的线性性质]

    传送门 题意: 七颗星,第$i$课星用第$j$个宝石有$p[i][j]$的概率成功,失败将为$g[i][j]$颗星: 第$j$个宝石化费$c[j]$ 求最小期望化费 $MD$本来自己思路挺对的看了半天 ...

  3. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

  4. 51Nod 1268 和为K的组合

    51Nod  1268  和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...

  5. 51Nod 1428 活动安排问题

    51Nod   1428  活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...

  6. 51Nod 1278 相离的圆

    51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...

  7. 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...

  8. 【51Nod 1622】【算法马拉松 19C】集合对

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...

  9. 【51Nod 1616】【算法马拉松 19B】最小集合

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...

随机推荐

  1. 后台返回xml格式转json

    之前后台做了一个xml格式的数据返回给前端,这个可愁坏了我,不过现在还是解决了,虽然方法有点笨,但没有找到其他的方法,先将就着用吧. 后台返回的是这样的: 那么我们就要这样处理:commonMetho ...

  2. tensorflow 文件队列

    使用文件队列,防止爆内存 # # 通过队列打开图片文件 file_queue = tf.train.string_input_producer(paths) img_reader = tf.Whole ...

  3. Ubuntu18.04 安装mysql8.0.11

    1.下载deb包 2.运行命令 sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb sudo apt update 3.安装mysql8 sudo apt i ...

  4. 消除TortoiseSVN 检出到(checkout)桌面上显示一堆问号

    之前不小心直接将版本库的内容检出到桌面,后才发现桌面上的文件图标都变成了问号,新建文件夹也同样如此. 为了解决这个问题,采用如下方法(任何一个检出文件夹均可这样操作): 1.删除桌面隐藏的.SVN文件 ...

  5. 【HANA系列】SAP HANA XS的JavaScript安全事项

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...

  6. server 2008 软阵列

    RAID0:没有容错功能,等.两块以上的硬盘.RAID1:不能提高速度,有容错功能,等.注意:只能用两块硬盘,有的地方说可以用两块以上,你不信试试三块硬盘,肯定添加不了,但是可以做raid10.RAI ...

  7. MySQL之慢查询日志分析

    在MySQL命令行中查看慢查询日志是否打开了: mysql> show variables like '%slow_query%'; +---------------------------+- ...

  8. layui框架学习记录

    自定义layui动态渲染的数据表格单元格样式 layui.use('table', function() { var table = layui.table; table.render({ elem: ...

  9. MDX 脚本语句 -- Scope

    在多维表达式 (MDX) 中,下列语句用于管理 MDX 脚本中的上下文.作用域和流控制. 主题 说明 calculate语句 计算子多维数据集,还可以确定子多维数据集中所包含的求解次序 case语句 ...

  10. 17秋 软件工程 团队第五次作业 Alpha Scrum6

    17秋 软件工程 团队第五次作业 Alpha Scrum6 今日完成的任务 世强:APP内通知消息发送; 港晨:APP前端登陆界面编写: 树民:Web后端数据库访问模块代码实现: 伟航:Web后端Re ...