题目描述

给出一个数$m$和$n$次操作,第$i$操作有$p_i$的概率成功,成功后会使$m$加上$a_i$($a_i$为正整数或$-1$),求$n$次操作以后成功的操作次数不少于$l$且$m\ge 0$的概率。

输入

第一行三个整数N,L,M。
第二行N个实数,第i个实数pi表示第i项挑战成功的百分比。
第三行N个整数,第i个整数ai表示第i项挑战的属性值.

输出

一个整数,表示所求概率,四舍五入保留6 位小数。

样例输入

3 1 0
10 20 30
-1 -1 2

样例输出

0.300000


题解

概率dp

设$f[i][j][k]$表示前$i$次操作成功了$j$次,此时$m$的值为$k$的概率。

那么状态转移显然。

然而有一个问题:$m(k)$的范围过大。

考虑到$a_i$仅为正整数或$-1$,而最终只要求$m\ge 0$。当一个时刻$m\ge n$时,无论怎么减少都不会降到$0$以下。因此当$m>n$时直接将其看作$n$处理即可。

数组下标需要向右平移$n$位。

由于空间不足需要使用滚动数组。

时间复杂度$O(n^3)$

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 210
using namespace std;
double p[N] , f[2][N][N << 1];
int main()
{
int n , t , m , a , i , j , k , d;
double ans = 0;
scanf("%d%d%d" , &n , &t , &m) , m = min(m , n);
for(i = 1 ; i <= n ; i ++ ) scanf("%lf" , &p[i]) , p[i] /= 100;
f[0][0][n + m] = 1;
for(d = i = 1 ; i <= n ; i ++ , d ^= 1)
{
scanf("%d" , &a);
for(j = 0 ; j <= n ; j ++ )
for(k = 0 ; k <= n * 2 ; k ++ )
f[d][j][k] = f[d ^ 1][j][k] * (1 - p[i]);
for(j = 0 ; j < n ; j ++ )
for(k = 1 ; k <= n * 2 ; k ++ )
f[d][j + 1][min(k + a , n * 2)] += f[d ^ 1][j][k] * p[i];
}
for(i = t ; i <= n ; i ++ )
for(j = n ; j <= 2 * n ; j ++ )
ans += f[n & 1][i][j];
printf("%.6lf\n" , ans);
return 0;
}

【bzoj3029】守卫者的挑战 概率dp的更多相关文章

  1. TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)

    题目链接...无 题目: P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们 ...

  2. [bzoj3029] 守卫者的挑战 (概率期望dp)

    传送门 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我,Nizem,是黑魔法圣殿的守 ...

  3. bzoj 3029 守卫者的挑战 —— 概率DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3029 设 f[i][j][k] 表示第 i 次挑战,已经成功 j 次,剩余容量为 k 的概率 ...

  4. 2018.09.27 bzoj3029: 守卫者的挑战(概率dp)

    传送门 概率dp经典题目. 直接f[i][j][k]f[i][j][k]f[i][j][k]表示当前是第i次挑战,已经胜利了j次,目前的背包剩余空间是k. 然后用前面的转移后面的就行了. 注意第三维可 ...

  5. 【BZOJ3029】守卫者的挑战 概率+背包

    [BZOJ3029]守卫者的挑战 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Nizem, ...

  6. tyvj P1864 [Poetize I]守卫者的挑战(DP+概率)

    P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜 ...

  7. 【BZOJ3029】守卫者的挑战 [期望DP]

    守卫者的挑战 Time Limit: 2 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 打开了黑魔法师Vani的大门,队 ...

  8. 【TYVJ1864】[Poetize I]守卫者的挑战 概率与期望

    [TYVJ1864][Poetize I]守卫者的挑战 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我 ...

  9. BZOJ3029守卫者的挑战(概率dp)

    题目大意:给定n个事件,第i个事件发生的概率为pi,收益为ai,初始收益为k,求n个事件之后发生的事件数>=l且收益>=0的概率 收益只可能是正整数或-1. Solution dp[i][ ...

随机推荐

  1. tomcat8080端口占用解决办法

    打开控制台,在窗口中输入指令:netstat -ano | findstr 8080       指令的意思是找出占用8080端口的进程pid 上图中表示占用进程pid为23288,然后再次输入指令: ...

  2. Maven - 依赖冲突

    依赖冲突有两个规则: 短路优先范例:A -> B -> C -> X-2.0.0A -> D -> X-1.0.0那么A -> X-1.0.0这个版本 先声明优先范 ...

  3. 利用python在windows环境下爬取赶集网工作信息。

    主要用到了多进程和多线程的知识,最后结果保存成csv文件格式,如有需要可改成数据库版本. 对用到的库做下简要介绍,具体请参考官方文档: xpinyin.Pinyin:将输入的中文转成拼音 concur ...

  4. 面试题 LazyMan 的Rxjs实现方式

    前言 笔者昨天在做某公司的线上笔试题的时候遇到了最后一道关于如何实现LazyMan的试题,题目如下 实现一个LazyMan,可以按照以下方式调用:LazyMan("Hank")输出 ...

  5. webstorm报错Unescaped xml character解决方案1

    当idea认为你的书写格式不适合的时候便会报出Unescaped xml character提示,但不影响运行. 若想禁掉这个提示,可以尝试修改文档类型为:<!DOCTYPE html>

  6. form submit 的callback方法

    参考:http://hayageek.com/jquery-ajax-form-submit/ form的submit方法返回数据处理. 普通的form: $("#ajaxform" ...

  7. url_maneger.py

    coding=UTF-8 # url管理器 class urlManeger: def __init__(self): self.new_urls = set() self.old_urls = se ...

  8. Android 数据库中的数据给到ListView

    前言:因为之前学的都是用一个自己定义的类,完成将某一个bean中的数据直接获取,而实际中通常是通过数据库来得到的,总之,最终就是要得到数据.提一下最重要的东西,我把它叫做代理,如同一个校园代理,没有他 ...

  9. Dapper基础增删查改、事务和存储过程

    1.前言 Dapper是一个轻量级的orm框架,上手也非常的简单,它可以实体映射,所以先准备实体如下: public class Couser { public int id { get; set; ...

  10. 读json文件发生错误,所遇到的坑

    当我们生产者生产json 文件的时候   消费时用JSON读文件时,如下: val values = kafkardd.map(t=>JSON.parseObject(t._2)) 如果发生以下 ...