bzoj 3029 守卫者的挑战——概率期望dp+状态数思考
题目: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+状态数思考的更多相关文章
- bzoj 3029 守卫者的挑战 —— 概率DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3029 设 f[i][j][k] 表示第 i 次挑战,已经成功 j 次,剩余容量为 k 的概率 ...
- [bzoj3029] 守卫者的挑战 (概率期望dp)
传送门 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我,Nizem,是黑魔法圣殿的守 ...
- bzoj 3029: 守卫者的挑战【概率dp】
以后写dp还是向后转移吧--写的把前面加起来的版本怎么也调不过去 首先注意,因为地图碎片只占1体积,所以>n,<-n的体积是没用的,所以就可以把体积降到n级别,然后用这场胜负像后转移即可, ...
- BZOJ 3029 守卫者的挑战
题面 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我,Nizem,是黑魔法圣殿的守卫 ...
- AcWing 232. 守卫者的挑战 (期望DP)打卡
题目:https://www.acwing.com/problem/content/description/234/ 题意:有n次挑战,每次挑战获胜可以得到一个地图碎片值为-1 或者 可以得到一个 ...
- bzoj 4501: 旅行 01分数规划+概率期望dp
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4501 题解: 首先我们不考虑可以删除边的情况下,如何计算期望边数. 然后我们发现这是个有 ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
- 【bzoj4832】[Lydsy2017年4月月赛]抵制克苏恩 概率期望dp
题目描述 你分别有a.b.c个血量为1.2.3的奴隶主,假设英雄血量无限,问:如果对面下出一个K点攻击力的克苏恩,你的英雄期望会受到到多少伤害. 输入 输入包含多局游戏. 第一行包含一个整数 T (T ...
- 【loj6191】「美团 CodeM 复赛」配对游戏 概率期望dp
题目描述 n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈.问最终栈中元素个数的期望是多少. 输入 一行一个正整数 n . 输出 一行一个实数,表示期望剩下的人数, ...
随机推荐
- webservice、httpClient、dubbo的区别
在开发中,对于同一个war包中的对象方法我们可以直接调用,但是很多情况下需要在不同项目或者不同服务器进行相互调用 webservice webservice技术可以实现不同服务器项目直接的调用和交换数 ...
- python3 使用aria2下载的一个脚本
import requests import time ariaurl="http://localhost:6800/jsonrpc" dlurl="http://xxx ...
- Ubuntu16.04安装pcl库
sudo apt-get install libpcl-dev sudo apt-get install pcl-tools
- python dict 实现swich
使用dict实现swich,通过不同的键映射不同的函数. swich = { 'hour1':pred.getper1htable, 'hour6':pred.getper6htable, 'hour ...
- vue-cli新手总结
项目中需要用到vue-cli脚手架来搭建前端框架,对于vue小白,总结一下自己遇到的问题以及解决方案,还要学习的地方有很多. vue-cli安装下载网上有很多教程,但对于新手而言,有些地方需要自己摸索 ...
- C++ 变量、常量、符号常量
变量: int i = 0; // i 是变量 i=5; //i 可以修改 变量就是程序内一个内存位置的符号名,在该内存位置可以保存数据,并可以通过符号名对该内存地址存放的数据进行访 ...
- StringBuffer清空
转载自:http://blog.sina.com.cn/s/blog_56fd58ab0100qfcz.html 在开发程序的时候,经常使用StringBuffer来进行字符串的拼接.如果在循环中来反 ...
- python3-常用模块之os
os模块,os是和操作系统交互的模块 os.getcwd() :获取当前工作目录,即当前python脚本工作的目录路径,如果是命令行模式下,同样表示当前目录下 os.listdir(路径): 列出指定 ...
- vue 关闭微信浏览器(返回路由为undefined时)
参考:https://blog.csdn.net/KingJin_CSDN_/article/details/77050569 main.js: import router from './route ...
- MapReduce 图解流程
Anatomy of a MapReduce Job In MapReduce, a YARN application is called a Job. The implementation of t ...