卧薪尝胆,厚积薄发。
Gosha is hunting
Date: Sun Mar 31 21:42:57 CST 2019 In Category: NoCategory

Description:

用 $A$ 抓到第 $i$ 哥的概率为 $p_i$ ,用 $B$ 为 $q_i$ ,给出 $A$ 和 $B$ 的个数,可以对同一个同时用 $A$ 和 $B$ ,求最大期望抓到的个数。
$1\leqslant n\leqslant 2000$

Solution:

$WQS$ 二分套 $WQS$ 二分即可。

Code:


#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cctype>
#include<cstring>
using namespace std;
inline int rd()
{
register int res = 0,f = 1;register char c = getchar();
while(!isdigit(c)){if(c == '-')f = -1;c = getchar();}
while(isdigit(c))res = (res << 1) + (res << 3) + c - '0',c = getchar();
return res * f;
}
int n;
#define MAXN 2010
double p[MAXN],q[MAXN];
int a,b;
typedef long long ll;
#define F 1e12
struct state
{
double val;
int cnta,cntb;
};
#define eps 1e-9
bool equal(double a,double b){return fabs(a - b) <= eps;}
bool operator < (state a,state b){return (a.val == b.val ? (a.cntb == b.cntb ? a.cnta > b.cnta : a.cntb > b.cntb) : a.val < b.val);}
state operator + (state a,state b){return (state){a.val + b.val,a.cnta + b.cnta,a.cntb + b.cntb};}
state f[MAXN];
state calc2(double ca,double cb)
{
for(int i = 1;i <= n;++i)
{
f[i].val = f[i].cnta = f[i].cntb = 0;
f[i] = max(f[i],f[i - 1]);
f[i] = max(f[i],f[i - 1] + (state){ca + p[i],1,0});
f[i] = max(f[i],f[i - 1] + (state){cb + q[i],0,1});
f[i] = max(f[i],f[i - 1] + (state){ca + cb + 1 - (1 - p[i]) * (1 - q[i]),1,1});
}//cout << ca << " " << cb << " " << f[n].val << " " << f[n].cnta << " " << f[n].cntb << endl;
return f[n];
}
state calc1(double ca)
{
double l = -1,r = 1,mid;
for(int i = 1;i <= 200;++i)
{
mid = 0.5 * (l + r);
if(calc2(ca,mid).cntb <= b)l = mid;
else r = mid;
}
state res = calc2(ca,l);
return (state){res.val - b * l,res.cnta,res.cntb};
}
int main()
{
scanf("%d%d%d",&n,&a,&b);
for(int i = 1;i <= n;++i)scanf("%lf",&p[i]);
for(int i = 1;i <= n;++i)scanf("%lf",&q[i]);
double l = -1,r = 1,mid;
for(int i = 1;i <= 200;++i)
{
mid = 0.5 * (l + r);
state res = calc1(mid);
if(res.cnta <= a)l = mid;
else r = mid;
}
printf("%.10lf\n",calc1(l).val - a * l);
return 0;
}
In tag: DP-DP凸优化
Copyright © 2020 wjh15101051
ღゝ◡╹)ノ♡