题链:

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. 网易云音乐APP分析

    网易云音乐-感受音乐的力量 你选择的产品是?  网易云音乐 为什么选择该产品作为分析? 之前用的一直是QQ音乐,但是有一天一个朋友分享了一首网易云上的音乐(顺便分享一下歌名:Drop By Drop) ...

  2. LeetCode & Q268-Missing Number-Easy

    Array Math Bit Manipulation Description: Given an array containing n distinct numbers taken from 0, ...

  3. 自定义SpringBoot启动banner

    序: springboot启动的时候会有一个启动logo似的东西,如图,这个logo似的东西叫做banner,本文小计修改此banner显示与关闭banner.没什么用,有兴趣可以玩玩-- 正文: 自 ...

  4. vue表单详解——小白速会

    一.基本用法 你可以用 v-model 指令在表单 <input> 及 <textarea> 元素上创建双向数据绑定. 但 v-model 本质上不过是语法糖.它负责监听用户的 ...

  5. windbg查找Kernel32.dll基址

    一.首先准备好一个程序,运行起来,用windbg进行附加调试,由于每个windows下的程序都会加载kernel32.dll,因此,找基址的过程是一样的:  二.查看PEB地址: 法一.r $peb ...

  6. kubernetes进阶(03)kubernetes的namespace

    服务发现与负载均衡Kubernetes在设计之初就充分考虑了针对容器的服务发现与负载均衡机制,提供了Service资源,并通过kube-proxy配合cloud provider来适应不同的应用场景. ...

  7. SpringCloud的应用发布(四)vmvare+linux,网关代理

    一.配置方式 1.代理同一个Eureka中注册的服务 2.代理url 二.访问方式:get - list 1.直接访问应用 2.代理访问应用

  8. SpringCloud的服务注册中心(四)- 高可用服务注册中心的搭建

    一.双 服务注册注册中心 1.服务注册中心的服务端 - EurekaServer 1.1.EurekaServer1 String.application.name=eureka-server ser ...

  9. HTTP协议扫盲(八 )响应报文之 Transfer-Encoding=chunked方式

    一.什么是chunked编码? 分块传输编码(Chunked transfer encoding)是只在HTTP协议1.1版本(HTTP/1.1)中提供的一种数据传送机制.以往HTTP的应答中数据是整 ...

  10. 前端之CSS内容

    一.CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). 二.CSS语法 1 ...