首页 > 编程知识 正文

牛客算法,卡特兰数递推公式

时间:2023-05-05 22:03:22 阅读:163398 作者:3293

题意很简单,就是求之不得

的最小值。

但是,有几个制约

首先,直接平均不等式

过了一段时间,样品过去了,然后变成了WA。

然后当你解决问题时,你会看到拉格朗日乘法。 我能发呆,但我没做过有不等式限制的公式啊。

然后我看了一下拉格朗日乘子法和KTT,但是一个也不懂。 全都是专业的数学术语。 然后直接例题我就不知道了。 写了几个小时。 您的菜真好啊。

后来看了那些大人物的代码,发现都很像。

最后队友想到的是理解上式形象的含义。

到ai/m等点的距离的平方的最小值。 并且对于为负数的点,将对应的pi设为零。

对正数ai/m使用平均不等式。 也不能样品。

然后经过长时间的思考,我发现即使小于零也可以使用平均不等式。

怎么判断呢?

首先,因为pi是大于零的数,ai是-m以上、m以下的数。

假设前I个可以取等号。 I把第1个相加后可以得出等号。

需要这样的判断式

假设右边大的时候也成立。

有这样的公式

处理一下就能得到

得到pi 1时小于0的,由于与题意矛盾,无法满足

# include ' bits/stdc.h ' usingnamespacestd; const double eps=1e-8; #definelowbit(x ) x-x#define pll pairll,ll#define pii pairint,int # definesesecond # definemake _ pair int 1 : -1; }typedef long long ll; typedef unsigned long long ull; const ull hash1=201326611; const ull hash2=50331653; const int N=100000 10; const int M=2048 10; const int inf=0x3f3f3f3f; const ll mod=998244353; ll n,m,a[N],sum[N]; int main () IOs :3360 sync _ with _ stdio (false ); CIN.Tie(0)、cout.tie(0)和cerr.tie(0) ) 0; wile(CINnm ) for ) intI=1; i=n; I () { cin a[i]; }sort(a1,a n 1,greater{} ); LP,q,cnt=n; sum[0]=0; for(intI=1; i=n; I ) (sum ) I )=sum(I-1 ) a ) I ); }for(intI=1; i n; I () if ) a[I1]*Isum[I]-m ) { cnt=i; 黑; } } q=cnt; p=(* (sum[cnt] - m ) ) sum[CNT]-m ); for(intI=CNT1; i=n; I ) { p =a[i] * a[i] * q; } q *=m * m; LD=__gcd(p,q ); p /=d,q /=d; if(p==0) cout '0' endl; elseif(q==1) cout p endl; else cout p '/' q endl; } return 0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。