51Nod 1705 七星剑
一道很新颖的概率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 七星剑的更多相关文章
- ●51NOD 1705 七星剑
题链: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1705题解: 期望dp,期望的线性性质 (首先对于第k颗星,一定只 ...
- 51NOD 1705 七星剑 [DP 期望的线性性质]
传送门 题意: 七颗星,第$i$课星用第$j$个宝石有$p[i][j]$的概率成功,失败将为$g[i][j]$颗星: 第$j$个宝石化费$c[j]$ 求最小期望化费 $MD$本来自己思路挺对的看了半天 ...
- 【51Nod 1244】莫比乌斯函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...
- 51Nod 1268 和为K的组合
51Nod 1268 和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...
- 51Nod 1428 活动安排问题
51Nod 1428 活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...
- 51Nod 1278 相离的圆
51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...
- 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...
- 【51Nod 1622】【算法马拉松 19C】集合对
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...
- 【51Nod 1616】【算法马拉松 19B】最小集合
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...
随机推荐
- Android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题
最近在移植网络摄像机里的p2p库到android平台,需要用到jni,最近在c线程了调用java函数的时候 出现一个问题,假如在同一个线程调用java函数是没问题的,但在一个c线程了调用java函数就 ...
- ImageButton和ImageView设置点击透明区域不响应
思路 ImageView和ImageButton都可以设置background和设置src,两者的区别自行度娘.由于两者的不同,获取它们的图片资源的方法也不同.倘若设置的是background,那么需 ...
- Git服务器配置及本地克隆提交、服务器获取
1.服务器Git安装配置 相关链接 相关链接 注意ssh-keygen .修改权限 权限: 相关链接 2.本地获取 git clone name@ip:服务器项目位置 相关链接 3.创建 ...
- MagicApp说明
title: MagicApp说明 date: 2017-12-06 05:41:00 tags: IT 技术 MagicApp是日常处理的程序,协助进行日常工作处理 批量重命名模块 说明 该模块是根 ...
- TensorFlow深度学习入门
# -*- coding: utf-8 -*- """ Created on Tue Oct 2 15:49:08 2018 @author: zhen "&q ...
- [20171120]11g select for update skip locked.txt
[20171120]11g select for update skip locked.txt --//11G在select for update遇到阻塞时可以通过skipped locked跳过阻塞 ...
- server 2008 软阵列
RAID0:没有容错功能,等.两块以上的硬盘.RAID1:不能提高速度,有容错功能,等.注意:只能用两块硬盘,有的地方说可以用两块以上,你不信试试三块硬盘,肯定添加不了,但是可以做raid10.RAI ...
- Python基础知识:测试代码
1.Python标准库中的模块unittest提供了代码测试工具. 单元测试用于核实函数的某个方面没有问题: 测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求. 通俗的理解 ...
- cc1plus.exe: error: unrecognized command line option "-fno-keep-inline-dllexport "
在Windows环境下的控制台上,通过qmake指令编译Qt程序时,出现 cc1plus.exe: error: unrecognized command line option "-fno ...
- January 10th, 2018 Week 02nd Wednesday
No need to have a reason to love you. Anything can be a reason not to love you. 喜欢你,不需要什么理由:不喜欢你,什么都 ...