ZOJ 3640 Help Me Escape:期望dp
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3640
题意:
有一个吸血鬼被困住了,他要逃跑。。。
他面前有n条路,每条路有一个困难程度c[i]。
他的初始攻击力为f。
每天他会从中随机选一条路:
(1)如果当前攻击力 > c[i],那么他会再花t天走这条路成功逃跑(t的公式如图)。

(2)攻击力 <= c[i],这条路他走不过去,但可以让他的攻击力 += c[i]。
问你成功逃跑所需天数的期望。
题解:
表示状态:
dp[i] = expected time(攻击力为i时,逃跑还需要的天数)
找出答案:
ans = dp[f]
初始攻击力为f。
如何转移:
对于每一条路,每一次被选择的概率都为1/n。
当前攻击力为i,枚举每一条路j,则:
(1)if i > c[j]: dp[i] += t/n (可以用t天逃跑)
(2)else: dp[i] += (dp[i+c[j]]+1)/n (攻击力增加c[j]后所用天数 + 今天一天)
边界条件:
对于一个攻击力max_atk满足max_atk > 所有的c[i],则所有的dp[max_atk]都相等。
(因为只能逃跑,不能再攒攻击力了)
所以找出满足条件的最小的max_atk,max_atk = max( max(c[i]), f )。
可能用到的攻击力最大为max_atk*2。
(根据Code: "else dp[i]+=(dp[i+c[j]]+1)/n")
所以按从max_atk*2到f的顺序求dp就行了。
初始值(设成啥都行。。。没用):set dp = 0
AC Code:
// state expression:
// dp[i] = expected time
// i: present atk
//
// find the answer:
// ans = dp[f]
//
// transferring:
// now: dp[i]
// enum: c[j]
// if i > c[j] dp[i] += t/n
// else dp[i] += (dp[i+c[j]]+1)/n
//
// boundary:
// set dp = 0
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX_N 105
#define MAX_F 30005 using namespace std; int n,f;
int max_atk;
int c[MAX_N];
double dp[MAX_F]; void read()
{
max_atk=f;
for(int i=;i<n;i++)
{
cin>>c[i];
max_atk=max(max_atk,c[i]);
}
} void solve()
{
memset(dp,,sizeof(dp));
for(int i=max_atk*+;i>=f;i--)
{
for(int j=;j<n;j++)
{
if(i>c[j]) dp[i]+=floor((1.0+sqrt())/2.0*c[j]*c[j])/n;
else dp[i]+=(dp[i+c[j]]+)/n;
}
}
} void print()
{
printf("%.3f\n",dp[f]);
} int main()
{
while(cin>>n>>f)
{
read();
solve();
print();
}
}
ZOJ 3640 Help Me Escape:期望dp的更多相关文章
- zoj 3640 Help Me Escape (概率dp 递归求期望)
题目链接 Help Me Escape Time Limit: 2 Seconds Memory Limit: 32768 KB Background If thou doest w ...
- zoj 3640 Help Me Escape 概率DP
记忆化搜索+概率DP 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include ...
- ZOJ 3329 Problem Set (期望dp)
One Person Game There is a very simple and interesting one-person game. You have 3 dice, namely Die1 ...
- Help Me Escape (ZOJ 3640)
J - Help Me Escape Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:32768KB ...
- 概率dp ZOJ 3640
Help Me Escape Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit ...
- ZOJ 3822 Domination 期望dp
Domination Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem ...
- poj 2096 , zoj 3329 , hdu 4035 —— 期望DP
题目:http://poj.org/problem?id=2096 题目好长...意思就是每次出现 x 和 y,问期望几次 x 集齐 n 种,y 集齐 s 种: 所以设 f[i][j] 表示已经有几种 ...
- 【HDU3853】LOOPS [期望DP]
LOOPS Time Limit: 5 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description Akemi Homura is a ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
随机推荐
- struts2学习笔记2 -struts2的开发步骤和工作原理
struts2的开发步骤: 1.先定义一个能发送请求的页面,可以是链接,也可以是表单(form) 2.开发action类,struts2对action并没有过多的要求,只要求: a 推荐实现actio ...
- odoo图片显示
如果在odoo客户端展示图片, 可以用 url( data:image/png;base64, 图片base64编码过的内容) 展示, 例如 url(data:image/png;ba ...
- Oracle 修改字段注释
修改字段注释SQL: COMMENT ON COLUMN 表名.字段名 IS '注释内容'; 批量修改所有表的字段注释,这里是修改所有没有注释的字段 附件: 实现步骤: ...
- DevOps必备的20款顶级工具
原文地址:http://os.51cto.com/art/201606/512423.htm 开发运维工具与软件开发领域的最佳实践密切相关,也与必要的规范密切相关.在整个开发生命周期涉及到一大批新旧工 ...
- cmake学习之-project
一.系统版本 cmake version: 3.5.2 系统版本: Ubuntun 16.04 cmake docment: 3.14.4 最后更新: 2019-05-31 二.指令说明 projec ...
- android开发系列之视频断点续传
今天在这篇博客里面,我想说说自己在这几天遇到的一个棘手的问题,就是视频断点续传的问题.其实这在我们开发中是一个很常见的应用场景,比如视频.音频.pdf等相关的文档.如果之前没有接触过的话,你也许会被这 ...
- GIT客户端的使用【原创】
这次分享的方式,采用的是视频的形式,视频是本人录制. 在做项目使用SVN的时候经常有各种错误出现,所以萌发使用git的想法.在学习git的过程中发现一个神器就是分支,虽然在SVN里也有分支,但由于机制 ...
- vue 流程设计器
github地址:https://github.com/280780363/gucflow.designer demo地址:https://280780363.github.io/gucflow.de ...
- antd引入普通html使用,将ant Design本地化
一直想着能本地化antd的,不用npm以及dva那么复杂的配置环境来开发,并且本地化以后对以后链接flask的模板渲染机制也能很好的结合.下面是具体的实现方法: 1.将react的相关链接引入: &l ...
- pjax简单实例
ajax缺点是破坏了浏览器的前进后退,因为ajax的请求不会留在历史记录中.pjax就不一样了,pjax被解释成ajax+pushState的封装,因为它把ajax的请求写入历史记录,并反映在地址栏, ...