【bzoj3029】守卫者的挑战 概率dp
题目描述
给出一个数$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的更多相关文章
- TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
题目链接...无 题目: P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们 ...
- [bzoj3029] 守卫者的挑战 (概率期望dp)
传送门 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我,Nizem,是黑魔法圣殿的守 ...
- bzoj 3029 守卫者的挑战 —— 概率DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3029 设 f[i][j][k] 表示第 i 次挑战,已经成功 j 次,剩余容量为 k 的概率 ...
- 2018.09.27 bzoj3029: 守卫者的挑战(概率dp)
传送门 概率dp经典题目. 直接f[i][j][k]f[i][j][k]f[i][j][k]表示当前是第i次挑战,已经胜利了j次,目前的背包剩余空间是k. 然后用前面的转移后面的就行了. 注意第三维可 ...
- 【BZOJ3029】守卫者的挑战 概率+背包
[BZOJ3029]守卫者的挑战 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Nizem, ...
- tyvj P1864 [Poetize I]守卫者的挑战(DP+概率)
P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜 ...
- 【BZOJ3029】守卫者的挑战 [期望DP]
守卫者的挑战 Time Limit: 2 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 打开了黑魔法师Vani的大门,队 ...
- 【TYVJ1864】[Poetize I]守卫者的挑战 概率与期望
[TYVJ1864][Poetize I]守卫者的挑战 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我 ...
- BZOJ3029守卫者的挑战(概率dp)
题目大意:给定n个事件,第i个事件发生的概率为pi,收益为ai,初始收益为k,求n个事件之后发生的事件数>=l且收益>=0的概率 收益只可能是正整数或-1. Solution dp[i][ ...
随机推荐
- android 圆角图片的实现形式
android 圆角图片的实现形式,包括用第三方.也有系统的.比如makeramen:roundedimageview,系统的cardview , glide .fresco . compile 'c ...
- BZOJ2752: [HAOI2012]高速公路(road)(线段树 期望)
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1820 Solved: 736[Submit][Status][Discuss] Descripti ...
- 洛谷P4316 绿豆蛙的归宿(期望)
题意翻译 「Poetize3」 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出 ...
- 【动态规划 floyd】SPOJ ACPC13
为什么rzz会把这题放在NOI模拟赛的T2? 题目大意 有一张$n$个点$m$条边的有向图,每条边有权值$w_i$. 定义一个任务$(a_i,b_i,c_i)$是如下一条路径: 最多经过$c_i$条边 ...
- hdu_4944_FSF’s game
FSF has programmed a game. In this game, players need to divide a rectangle into several same square ...
- 搭建MQTT代理服务器
# 解压tar zxfv mosquitto-1.4.14.tar.gz# 进入目录cd mosquitto-1.4.14# 编译make# 安装sudo make instal 1 启动代理服务在第 ...
- My jdbc 错误
jdbc mysql插入数据提示Parameter index out of range (1 > number of parameters, which is 0). SqlStatement ...
- 如何在CentOS 7.1中安装VMware Workstation
VMware Workstation在windows环境中大家都会安装,最近公司有个需求是需要在CentOS环境中安装VMware Workstation,上官网查了下还真有Linux版本的,于是就开 ...
- 779. K-th Symbol in Grammar
class Solution { public: int kthGrammar(int N, int K) { return helper(N, K, false); } int helper(int ...
- RabbitMQ实现中AMQP与MQTT消息收发异同
实现了AMQP与MQTT(至多一次)后,用多个队列以topic exchange的方式用相同交换机监听同一个主题(topic),发现情况存在不同,觉得有点意思,所以记录了下来. 用2个MQTT(分别记 ...