Codeforces.739E.Gosha is hunting(DP 带权二分)
\(Description\)
有\(n\)只精灵,两种精灵球(高级和低级),每种球能捕捉到第\(i\)只精灵的概率已知。求用\(A\)个低级球和\(B\)个高级球能捕捉到精灵数的最大期望。
\(n\leq10^5\)。
\(Solution\)
设\(f[i][a][b]\)表示前\(i\)只用了\(a\)个低级球,\(b\)个高级球的最大期望。转移时四种情况显然。复杂度\(\mathcal O(nAB)\)。
随着某种球可使用数的增多,f应是凸函数,即增长越来越慢。而且两种球都满足这个性质。
于是可以wqs二分套wqs二分了。。
没有个数限制的话,取个\(\max\),记一下个数就可以了。复杂度\(\mathcal O(nlog^2n)\)。
误差\(\leq 10^{-4}\),因为最后要\(*A/B\),所以\(eps\)应是\(10^{-8}\)...?
最后必须取\(r\)感觉不太懂。。
[Update] 19.2.11
二分的时候只要保证恰好取到\(k\)个就可以了,斜率具体是多少无所谓。而本题\(r\)才是正确的位置...
应该是这么理解吧...
总结:对于有着次数/段数之类的限制,可以使用带权二分来消掉这一限制,从而可以进行简单的快速DP。
//46ms 0KB
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define eps (1e-12)
const int N=2003;
int n,A,B,na[N],nb[N];
double pa[N],pb[N],Ans;
void Solve(double ca,double cb)
{
na[0]=nb[0]=0;
double las=0, now;
for(int i=1; i<=n; ++i, las=now)
{
now=las, na[i]=na[i-1], nb[i]=nb[i-1];
if(las+pa[i]-ca>now) now=las+pa[i]-ca, na[i]=na[i-1]+1;
if(las+pb[i]-cb>now) now=las+pb[i]-cb, nb[i]=nb[i-1]+1, na[i]=na[i-1];
if(las+pa[i]+pb[i]-pa[i]*pb[i]-ca-cb>now)//1-(1-pa)(1-pb)
now=las+pa[i]+pb[i]-pa[i]*pb[i]-ca-cb, na[i]=na[i-1]+1, nb[i]=nb[i-1]+1;
}
Ans=now;
}
int main()
{
scanf("%d%d%d",&n,&A,&B);
for(int i=1; i<=n; ++i) scanf("%lf",&pa[i]);
for(int i=1; i<=n; ++i) scanf("%lf",&pb[i]);
double l1=0,r1=1,mid1,l2,r2,mid2;//每个球0/1的权值就可以了啊
while(r1>=l1+eps)
{
mid1=(l1+r1)*0.5;
l2=0, r2=1;
while(r2>=l2+eps)
{
if(Solve(mid1,mid2=(l2+r2)*0.5),nb[n]>B) l2=mid2;
else r2=mid2;
}
if(Solve(mid1,r2),na[n]>A) l1=mid1;//最优可行的是r2?反正不是l2。。
else r1=mid1;
}
Solve(r1,r2);//最后Check一遍r。。
printf("%.5lf",Ans+A*r1+B*r2);
return 0;
}
Codeforces.739E.Gosha is hunting(DP 带权二分)的更多相关文章
- 洛谷 4383 [八省联考2018]林克卡特树lct——树形DP+带权二分
题目:https://www.luogu.org/problemnew/show/P4383 关于带权二分:https://www.cnblogs.com/flashhu/p/9480669.html ...
- 洛谷.4383.[八省联考2018]林克卡特树lct(树形DP 带权二分)
题目链接 \(Description\) 给定一棵边带权的树.求删掉K条边.再连上K条权为0的边后,新树的最大直径. \(n,K\leq3\times10^5\). \(Solution\) 题目可以 ...
- 6.13校内互测 (DP 带权二分 斜率优化)
丘中有麻plant 改自这儿,by ZBQ. 还有隐藏的一页不放了.. 直接走下去的话,如果开始时间确定那么到每个点的时间确定,把time减去dis就可以去掉路程的影响了. 这样对于减去d后的t,如果 ...
- codeforces 739E - Gosha is hunting
这道题有三种做法,感受一下: 感觉到了歪果仁费尽脑汁想出来的神仙贪心脑洞题被中国人套路算法踩爆的凄凉...(我的名字是不是暴露了我的真实实力) ============================ ...
- DP的各种优化(动态规划,决策单调性,斜率优化,带权二分,单调栈,单调队列)
前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [D ...
- CF 739E Gosha is Hunting
有 $n$ 个 Pokemon,你有 $A$ 个一类精灵球,$B$ 个二类精灵球 分别给出每个 Pokemon 被这两类精灵球捕捉的概率 求抓到 Pokemon 的最优期望个数 $n\leq 2000 ...
- P4383 [八省联考2018]林克卡特树lct 树形DP+凸优化/带权二分
$ \color{#0066ff}{ 题目描述 }$ 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的 ...
- 洛谷P2619 [国家集训队2]Tree I(带权二分,Kruscal,归并排序)
洛谷题目传送门 给一个比较有逼格的名词--WQS二分/带权二分/DP凸优化(当然这题不是DP). 用来解决一种特定类型的问题: 有\(n\)个物品,选择每一个都会有相应的权值,需要求出强制选\(nee ...
- BZOJ_4609_[Wf2016]Branch Assignment_决策单调性+带权二分
BZOJ_4609_[Wf2016]Branch Assignment_决策单调性+带权二分 Description 要完成一个由s个子项目组成的项目,给b(b>=s)个部门分配,从而把b个部门 ...
随机推荐
- hdu 1716 排列2(DFS搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1716 排列2 Time Limit: 1000/1000 MS (Java/Others) Me ...
- Java编程思想 4th 第2章 一切都是对象
Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...
- Pool thread stack traces: Thread[C3P0PooledConnectionPoolManager[identityToken->原因解决办法
今天本地连接测试库测试,发现早上还是好的,下午就崩了,报这个错,使用的是c3po连接池: , 纠结了好久,发现是数据库连接用光了,很多人都在连,果断换了本地库,好使了,看百度说把macPoolSizz ...
- MySQL增量备份与恢复实例【转】
小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份.增量备份的原理就是使用了mysql的binlog日志.本次操作的 ...
- 使用DOS访问数据库详解
今天突发奇想,想是否可以用DOS命令来操作本地数据库或者连接其他外地数据库,网上搜了很多教程比较繁琐,自己想写一篇文章详细叙述一下,也为以后复习做点备份. 工具: 电脑 win7 64bit MySQ ...
- 数据库-mysql储存过程
存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行. 一:创建存储过程 MariaDB [test2]> delimiter // MariaDB [tes ...
- vue项目中,Iview打包到生产环境时, woff 字体引用问题
出现这问题的原因是文件路径不对,与webpack有关,解决的办法为: 一.修改webpack.prod.conf.js module: { rules: utils.styleLoaders({ so ...
- java基础71 XML解析中的【DOM和SAX解析工具】相关知识点(网页知识)
本文知识点(目录):本文下面的“实例及附录”全是DOM解析的相关内容 1.xml解析的含义 2.XML的解析方式 3.xml的解析工具 4.XML的解析原理 5.实例 6 ...
- window时间同步机制的简单介绍
1 window自身现在采用w32tm程序来进行时间校正,window自身携带NTP程序,但默认下时关闭的,默认的NTP时客户端. 2 w32tm时用来代替早期的时钟同步程序net time 3 w ...
- 题解 P1074 【靶形数独 】
这是一神题!!! 可能是因为我太弱了,题解都看不太懂QWQ 不过感谢wng老师的提醒,我写出了这个样的的代码. 分析: 这道题是一个搜索(dfs).很神奇很暴力的题 首先,你需要看懂题目.(可以先去玩 ...