题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3029

先随便写了个dfs,记录“前 i 次、成功 j 次、容量-残片=k”的概率。因为是否可行只和“成功次数”还有“容量-残片个数”有关,和容量、残片具体数量无关。准备记忆化,但发现状态存不下。

#include<iostream>
#include<cstdio>
#include<cstring>
#define db double
using namespace std;
const int N=,M=;
int n,l,K,a[N];
db p[N],ans;
void dfs(int i,int j,int c,double w)//至少有c个
{
if(c>n)c=n;
if(i>n)
{
if(j>=l&&c>=)ans+=w;return;
}
if(j+(n-i+)<l)return;
if(a[i]>=)
{
dfs(i+,j+,c+a[i],w*p[i]);
dfs(i+,j,c,w*(-p[i]));
}
else
{
dfs(i+,j+,c-,w*p[i]);
dfs(i+,j,c,w*(-p[i]));
}
}
int main()
{
scanf("%d%d%d",&n,&l,&K);int x;
for(int i=;i<=n;i++)
{
scanf("%d",&x);p[i]=(db)x/;
}
for(int i=;i<=n;i++)scanf("%d",&a[i]);
dfs(,,K,);
printf("%.6lf\n",ans);
return ;
}

然后想到了 bzoj4247 挂饰 的思路。就是发现“容量-残片数量”大于n的话多出来的部分没什么用,可以把大于n记成等于n。这样第三维就只有2*n啦!然后就可以刷表了。

#include<iostream>
#include<cstdio>
#include<cstring>
#define db double
using namespace std;
const int N=,M=;
int n,l,K,a[N];
db p[N],ans,dp[][N][N<<];
int main()
{
scanf("%d%d%d",&n,&l,&K);int x;
for(int i=;i<=n;i++)
{
scanf("%d",&x);p[i]=(db)x/;
}
for(int i=;i<=n;i++)scanf("%d",&a[i]);
dp[][][min(n,K)+N]=;
for(int i=;i<n;i++)
{
int d=(i&);
for(int j=;j<i;j++)
for(int k=-n;k<=n;k++)dp[!d][j][k+N]=;
for(int j=;j<=i;j++)
for(int k=-n;k<=n;k++)
{
if(a[i+]>=)
{
dp[!d][j+][min(n,k+a[i+])+N]+=dp[d][j][k+N]*p[i+];//+=
dp[!d][j][k+N]+=dp[d][j][k+N]*(-p[i+]);
}
else
{
dp[!d][j+][k-+N]+=dp[d][j][k+N]*p[i+];
dp[!d][j][k+N]+=dp[d][j][k+N]*(-p[i+]);
}
}
}
int d=(n&);
for(int j=l;j<=n;j++)
for(int k=;k<=n;k++)
ans+=dp[d][j][k+N];
printf("%.6lf\n",ans);
return ;
}

bzoj 3029 守卫者的挑战——概率期望dp+状态数思考的更多相关文章

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

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

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

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

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

    以后写dp还是向后转移吧--写的把前面加起来的版本怎么也调不过去 首先注意,因为地图碎片只占1体积,所以>n,<-n的体积是没用的,所以就可以把体积降到n级别,然后用这场胜负像后转移即可, ...

  4. BZOJ 3029 守卫者的挑战

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

  5. AcWing 232. 守卫者的挑战 (期望DP)打卡

    题目:https://www.acwing.com/problem/content/description/234/ 题意:有n次挑战,每次挑战获胜可以得到一个地图碎片值为-1  或者  可以得到一个 ...

  6. bzoj 4501: 旅行 01分数规划+概率期望dp

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4501 题解: 首先我们不考虑可以删除边的情况下,如何计算期望边数. 然后我们发现这是个有 ...

  7. 【BZOJ-1419】Red is good 概率期望DP

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

  8. 【bzoj4832】[Lydsy2017年4月月赛]抵制克苏恩 概率期望dp

    题目描述 你分别有a.b.c个血量为1.2.3的奴隶主,假设英雄血量无限,问:如果对面下出一个K点攻击力的克苏恩,你的英雄期望会受到到多少伤害. 输入 输入包含多局游戏. 第一行包含一个整数 T (T ...

  9. 【loj6191】「美团 CodeM 复赛」配对游戏 概率期望dp

    题目描述 n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈.问最终栈中元素个数的期望是多少. 输入 一行一个正整数 n . 输出 一行一个实数,表示期望剩下的人数, ...

随机推荐

  1. Activiti学习笔记2 — HelloWorld

    一. Maven的POM配置文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="htt ...

  2. READING | 我是一只IT小小鸟

    “世界是如此的熙熙攘攘,让年轻的心找不到方向,但这些人是不能小看的啊,如果他们开始敲打自己的命令行.” “知之者不如好知者,好之者不如乐之者”,很多IT界的优秀人才都对计算机技术或者IT技术有着浓厚的 ...

  3. 【默默努力】h5-game-blockBreaker

    先放下游戏的效果,我不太会玩游戏 然后放下无私开源的作者大大的地址:https://github.com/yangyunhe369/h5-game-blockBreaker 这个游戏的话,我觉得应该是 ...

  4. java定时器demo

    package cn.threadtest.thread; import java.util.Date; import java.util.Timer; import java.util.TimerT ...

  5. mysql 存中文失败问题

    在向数据库存中文时报错: 将中文字段的字符集改为utf8即可: 成功截图:

  6. CLOSE_WAIT问题讨论

    1.https://cloud.tencent.com/developer/article/1347610 2.https://blog.huoding.com/2016/01/19/488 3.ht ...

  7. php数据结构课程---6、常见排序有哪些

    php数据结构课程---6.常见排序有哪些 一.总结 一句话总结: 冒泡排序(Bubble sort):依次交换 选择排序 ( Selection Sort ):在未排序序列中找到最小(大)元素,依次 ...

  8. Django项目: 2.模板抽取

    为什么要抽模板,因为这样能够复用代码,减少代码量,需要原代码时就不需要修改,也不需要添加; 如果不同,就只需要单独修改不一样的地方就行  : 多挖坑,少代码,这就是抽模板的精髓,挖坑就是({% blo ...

  9. 11-7-this的最基本认识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. JS实用插件

    1. jQuery鼠标滚轮事件插件Mouse Wheel 下载链接:https://github.com/brandonaaron/jquery-mousewheel/ 使用方法: // using ...