一道很新颖的概率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. 自定义控件详解(四):Paint 画笔路径效果

    Paint  画笔 ,即用来绘制图形的"笔" 前面我们知道了Paint的一些基本用法: paint.setAntiAlias(true);//抗锯齿功能 paint.setColo ...

  2. Django ModelForm 小实例1

    1.models.py ASSET_STATUS = ( (str(1), u"使用中"), (str(2), u"未使用"), (str(3), u" ...

  3. linux 下的ssh

    ssh服务 1.检查是否有被安装,命令 rpm -qa|grep "ssh" 2.检查ssh有没有在运行,命令 rpm -qa|grep "ssh" 3.如何启 ...

  4. LeetCode题解之Binary Tree Paths

    1.题目描述 2.分析 使用递归. 3.代码 vector<string> ans; vector<string> binaryTreePaths(TreeNode* root ...

  5. 基于TensorFlow进行TensorBoard可视化

    # -*- coding: utf-8 -*- """ Created on Thu Nov 1 17:51:28 2018 @author: zhen "&q ...

  6. nginx服务器开启缓存、反向代理

    一.反向代理配置 1.反向代理服务器配置如下 反向代理就是需要这一行proxy_pass来完成.当我们要访问后端web服务器的时候,我们只需要访问代理服务器就可以了,此时代理服务器就充当后端web服务 ...

  7. 【HTTP缓存】浏览器缓存理论知识

    时间:2016-12-12 17:51:30 作者: zhongxia 零.前言 这里主要写的是理论,具体实践的比较少,后期写一个实践教程,内容基本都是从参考文章里面抄过来的[看完文章,顺便写做下笔记 ...

  8. 关于解决Python中requests模块在PyCharm工具中导入问题

    问题引入: 今天在学习Python网络请求的时候,导入requests模块时一直报红色波浪线,如图: 反复折腾,一直以为自己没有安装requests模块,反复安装反复卸载: 安装方法: 首先 cd 进 ...

  9. HTTP数据组织方式

    HTTP网络传输中的数据组织方式有三种方式: 1.HTML方式 2.XML方式 3.JSON方式     XML介绍:XML称为可扩展标记语言,它与HTML一样,都是SGML(标准通用标记语言) XM ...

  10. WPFのImage控件souce引入的方法总结

    1.后台代码相对路径添加(若为绝对路径,换UriKind的属性即可) BitmapImage testBitmapImage = new BitmapImage(new Uri(@"\bin ...