bzoj 3029: 守卫者的挑战【概率dp】

以后写dp还是向后转移吧……写的把前面加起来的版本怎么也调不过去

首先注意,因为地图碎片只占1体积,所以>n,<-n的体积是没用的,所以就可以把体积降到n级别,然后用这场胜负像后转移即可,滚动数组优化

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

原文地址:https://www.cnblogs.com/lokiii/p/9633895.html

时间: 2024-10-09 11:30:12

bzoj 3029: 守卫者的挑战【概率dp】的相关文章

bzoj 3029 守卫者的挑战——概率期望dp+状态数思考

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3029 先随便写了个dfs,记录"前 i 次.成功 j 次.容量-残片=k"的概率.因为是否可行只和"成功次数"还有"容量-残片个数"有关,和容量.残片具体数量无关.准备记忆化,但发现状态存不下. #include<iostream> #include<cstdio> #include<cstring> #

BZOJ 3029 守卫者的挑战 期望DP

题目大意:给定n个事件,第i个事件发生的概率为pi,收益为ai,初始收益为k,求n个事件之后发生的事件数>=l且收益>=0的概率 令f[i][j][k]表示第i个事件进行后已经发生了j个事件且当前受益为k的概率 MB破输入法打两行字错了十多遍 第三维好大- - 不会爆? 实际上第三维大于n就没有意义了 因为收益大于n时一定不会扣到负数 因此将第三维大于n的状态全都存到n上即可 时间复杂度O(n^3) 卡内存差评 #include <cstdio> #include <cstr

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

题目链接...无 题目: P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过. "我,Nizem,是黑魔法圣殿的守卫者.如果你能通过我的挑战,那么你可以带走黑魔法圣殿的地图--"瞬间,队员们被传送到了一个擂台上,最初身边有一 个容量为K的包包. 擂台赛一共有N项挑战,各项挑战依次

BZOJ 3029 守卫者的挑战

一开始搞了两个dp数组,分别记到第i盘,胜j盘,拿到k个碎片和背包大小>=k的概率,然后寻思着把它们乘起来? 后来发现好像是错的....这个地方不能用乘法,这两件事情是相关的.(我瞎jb猜的...其实是样例没过) 然后发现只要一个数组就行了....收益就是+a[i],-1,问最后收益>=0,胜场>=l的方案数...然后直接dp. 卡内存差评. #include<iostream> #include<cstdio> #include<cstring> #

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

守卫者的挑战 Time Limit: 2 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Nizem,是黑魔法圣殿的守卫者.如果你能通过我的挑战,那么你可以带走黑魔法圣殿的地图……”瞬间,队员们被传送到了一个擂台上,最初身边有一个容量为K的包包. 擂台赛一共有N项挑战,各项挑战依次进行.第i

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

[TYVJ1864][Poetize I]守卫者的挑战 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我,Nizem,是黑魔法圣殿的守卫者.如果你能通过我的挑战,那么你可以带走黑魔法圣殿的地图--"瞬间,队员们被传送到了一个擂台上,最初身边有一个容量为K的包包. 擂台赛一共有N项挑战,各项挑战依次进行.第i项挑战有一个属性ai,如果ai>=0,表示这次挑战成功后可以再获得一个容量为ai的包包:如

CODEVS 1997 守卫者的挑战(三维dp)

题目很简单,就是一个三维的dp,状态转移方程很好想出来,有一点需要注意这道题目在取的中间过程的时候允许出现背包装不下的情况,只要最后的状态是可以的就行了.注意负数的转移就行了啊. maxn = 210 MLE, 201就AC了啊. 题目描述 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我,Nizem,是黑魔法圣殿的守卫者.如果你能通过我的挑战,那么你可以带走黑魔法圣殿的地图--"瞬

BZOJ 1246 &amp; 有点不一样的概率DP

题意: 题意够坑的啊... 一个色子有n个面,第k次掷出一个加上这个k.求掷出所有面的期望值. 我一直以为值是色子面上的... 那么问题来了在色子面上怎么做...n还是1w级别... SOL: 对着理解错的题面想了半天还是没想出来比O(n^2)强的算法.. 这题跟上次lightoj那道丝帛题有点像,但那个每个面都可以看做一样的所以丝帛很多... 空间也一样要炸,然后不行看题解...发现原来是这样... 感觉对着原来的问题每种情况都相当于是独立的...感觉除了撞鸭其它没法搞啊... 然而感觉改了以

bzoj 3191 [JLOI2013]卡牌游戏 概率dp

题面 题目传送门 解法 设\(f_{i,j}\)表示总共\(i\)个人,第\(j\)个人最终获胜的概率 枚举当前选择的是哪一张卡,那么就知道下一轮被淘汰的是谁了,假设是\(x\) 显然,下一轮的庄家就是\(x\)的下一个人 如果\(x=j\),那么可以不用管这种情况 如果\(x>j\),那么\(j\)在下一轮的编号为\(i-x+j\),否则为\(j-x\) 对应的两种情况转移一下即可 时间复杂度:\(O(n^2m)\) 代码 #include <bits/stdc++.h> #defin