博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF739E Gosha is hunting
阅读量:4501 次
发布时间:2019-06-08

本文共 1154 字,大约阅读时间需要 3 分钟。

暴力\(N^3\)dp就是\(f_{i,j,k}\),前\(i\)个东西,用\(j\)个第一个球和\(k\)个第二个球

然后可以发现随着限制\(a\)以及\(b\)的增加,答案是一个上凸函数,所以可以二分(好像叫\(wqs\)二分).二分第一维以及第二维的代价,然后做没有个数限制的dp,转移记录两种球用了多少个,以及转移时要每用一个球答案减去对应的代价.根据用到球个数调整二分边界,直到用的球个数都等于限制\(a\)\(b\)就能求出答案

然后二分边界被卡的飞起qwq

//WA代码#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long#define db doubleusing namespace std;const int N=2000+10;const db eps=1e-6;LL rd(){ LL x=0,w=1;char ch=0; while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();} return x*w;}int n;db aa,bb,a[N],b[N],c[N],f[N],na[N],nb[N];void cal(db m1,db m2){ for(int i=1;i<=n;++i) { f[i]=f[i-1],na[i]=na[i-1],nb[i]=nb[i-1]; if(f[i]
eps) { db m1=(l1+r1)/2; db l2=0,r2=1; while(r2-l2>eps) { db m2=(l2+r2)/2; cal(m1,m2); if(nb[n]<=bb) z2=m2,r2=m2-eps; else l2=m2+eps; } cal(m1,z2); if(na[n]<=aa) z1=m1,r1=m1-eps; else l1=m1+eps; } cal(z1,z2); printf("%.5lf\n",f[n]+na[n]*z1+nb[n]*z2); return 0;}

转载于:https://www.cnblogs.com/smyjr/p/11012799.html

你可能感兴趣的文章
TP之空操作及View模块
查看>>
shiro学习笔记:授权管理
查看>>
Java 使用正则表达式取出图片地址以及跳转的链接地址,来判断死链(一)
查看>>
代理delegate、NSNotification、KVO在开发中的抉择
查看>>
剑指offer--二叉搜索树的后序遍历序列
查看>>
Selenium学习第一章:搭建测试环境
查看>>
SASS笔记
查看>>
2.学习Application
查看>>
php第二十五节课
查看>>
CS224d lecture 6札记
查看>>
[NOIP 2011]聪明的质监员
查看>>
[Sdoi2013]spring
查看>>
TopCoder SRM 633 Div.2 500 Jumping
查看>>
iOS 相关博客清单
查看>>
GLSL新手上路 -- 《交互式计算机图形学》附录中GLSL代码有误 -- 修改如下
查看>>
xss挑战赛小记 0x02(prompt(1))
查看>>
软件工程 第四课(毕业论文管理系统——面向对象)
查看>>
springboot 获取post请求参数
查看>>
Netty4/Android6 SSL双向认证 攻略 2016.10.13
查看>>
webpack的在开发生产时的具体功能
查看>>