题链:

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1705
题解:

期望dp,期望的线性性质
(首先对于第k颗星,一定只会用同一种膜法石去炼化它。)
定义f[k]表示炼化成功第k颗星最小的期望花费。
正向枚举k,然后枚举当前用哪个膜法石i去炼化
当然要为两种情况:炼化成功与否
1.成功:期望的花费即为prob[k][i]*c[i]
2.失败:
首先也有一个c[i]的花费(虽然没有成功,但是还是用了这个膜法石),
令j=k-lose[k][i],用拿i膜法石成功炼化第k颗星的期望花费为_f;
然后我们回到之前的某个状态:成功炼化了j-1颗星,
也就是说,我们如果要炼化成功第k颗星,我们还需要重新成功炼化第j~k这些星。
设重新成功炼化那1mol的星,期望需要w的花费,
按照期望的线性性质可以得到:w=f[j]+f[j+1]+......+f[k-1]+_f
若统计前缀和的话,即w=_f+sumf[k-1]-sumf[j-1];
所以可以得到失败时期望花费的转移:
(1-prob[k][i])*(c[i]+_f+sumf[k-1]-sumf[j-1])

所以综上,拿i膜法石成功炼化第k颗星的期望花费为:
_f=prob[k][i]*c[i]+(1-prob[k][i])*(c[i]+_f+sumf[k-1]-sumf[j-1]);
上式通过移项后,可以求出_f的值。
然后对f[k]取min即可:f[k]=min(f[k],_f(每种膜法石都可以得到一个_f))。

dp结束后sumf[7]=f[1]+f[2]+...+f[7]即是答案。

(输出-1的情况直接在读入时特判掉就好)

代码:

#include<bits/stdc++.h>
#define MAXN 105
#define doubleINF 1e37
using namespace std;
const double eps=1e-10;
int c[MAXN],lose[10][MAXN];
double prob[10][MAXN],f[10],sumf[10];
int N;
int main(){
ios::sync_with_stdio(0);
cin>>N;
for(int i=1;i<=N;i++) cin>>c[i];
for(int k=1;k<=7;k++){
bool fg=0;
for(int i=1;i<=N;i++)
cin>>prob[k][i],fg|=(prob[k][i]>eps);
if(!fg) return printf("-1\n"),0;
}
for(int k=1;k<=7;k++)
for(int i=1;i<=N;i++)
cin>>lose[k][i],lose[k][i]=k-lose[k][i];
for(int k=1;k<=7;k++){
f[k]=doubleINF;
for(int i=1;i<=N;i++){
double P=prob[k][i]; int C=c[i],j=lose[k][i];
double _f=P*C+(1-P)*(C+sumf[k-1]-sumf[j-1]);
_f=_f/P;
f[k]=min(f[k],_f);
}
sumf[k]=sumf[k-1]+f[k];
}
cout<<fixed<<setprecision(10)<<sumf[7]<<endl;
return 0;
}

  

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

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

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

  2. 51Nod 1705 七星剑

    一道很新颖的概率DP,我看数据范围还以为是有指数级别的复杂度的呢 记得有人说期望要倒着推,但放在这道题上,就咕咕了吧. 我们考虑正着概率DP,设\(fi\)表示将剑升到\(i\)颗星花费的期望,这样我 ...

  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. jQuery函数学习

    函数:after(content) 功能:在每个匹配的元素后面添加html内容 返回:jQuery对象 参数:content (<Content>): Content to insert ...

  2. 【Swift】 iOS开发容易产生Bug的地方

    1.隐藏navigationBar(尤其是多级隐藏) 2.共用collectionView或tableView 3.继承关系下,注意覆写父类时的super方法的调用 4.关于权限的问题(相机权限,相册 ...

  3. 使用Putty连接Amazon EC2 Instance

    Amazon的EC2中,默认是不允许使用用户名和密码直接连接Instance的,而是通过AWS (Amazon Web Service)提供的证书.在第一次使用EC2的时候,AWS会要求你创建一个证书 ...

  4. 11-TypeScript中的名称空间

    在后端开发语言中,比如C#中,可以将不同源代码文件中的代码通过名称空间组合到一起.一般一个类定义在一个源代码文件中,在功能上属于一个上下文的源代码文件通过名称空间进行组织. 在TypeScript中, ...

  5. 【微软大法好】VS Tools for AI全攻略(2)

    接着上文,我们来讨论如何使用Azure资源来训练我们的tensorflow项目.Azure云我个人用得很多,主要是因为微软爸爸批了150刀每月的额度,我可以愉快地玩耍. 那么针对Azure,有成套的两 ...

  6. C# if判断语句执行顺序

    DataTable dt = null; )//不报错,因为先执行dt != null 成立时才执行dt.Rows.Count > 0 { } && dt != null)//报 ...

  7. 关于kali linux 2.0的vmware tools的安装问题

    在安装好kali linux 2.0 后,首先要做的就是添加源并更新系统,否则会出现软件定位问题. 在kali 2.0中,vmware tools已经不能使用了,官方放了一个工具下载安装就好. 添加源 ...

  8. 深度学习之 mnist 手写数字识别

    深度学习之 mnist 手写数字识别 开始学习深度学习,先来一个手写数字的程序 import numpy as np import os import codecs import torch from ...

  9. kubernetes进阶(02)kubernetes的node

    一.Node概念 Node是Pod真正运行的主机,可以物理机,也可以是虚拟机. 为了管理Pod,每个Node节点上至少要运行container runtime(比如docker或者rkt). kube ...

  10. docker注意事项

      当你最后投入容器的怀抱,发现它能解决很多问题,而且还具有众多的优点: 第一:它是不可变的 – 操作系统,库版本,配置,文件夹和应用都是一样的.您可以使用通过相同QA测试的镜像,使产品具有相同的表现 ...