拉格朗日乘数法
虽然我并不知道如何证明,但是背下结论套的话这题就是模板题了。
设第i段路骑行速度为x_i
f=\sum \frac{s_i}{x_i}
要求最小化f
设g=E_u-\sum k_i*(x_i-v_i)^2*s_i
贪心,当x_i<v_i时,存在关于v_i对称的x使代价不变而答案更优
故x_i>=v_i
故当g不为0时,一定可以增大x使答案更优,即最优解时g=0
f=\sum \frac{s_i}{x_i}
g=E_u-\sum k_i*(x_i-v_i)^2*s_i=0
设t=f-\lambda*g
根据拉格朗日乘数啥子的,当t的偏导为0时,f取得极值
即
-\frac{s_i}{x_i}+ 2\lambda k_i s_i(x_i-v_i)=0
x_i>=v_i,故\lambda随x_i单调
二分\lambda使g=0即可
注意实数二分最好控制次数而不是eps
关于二分的上界我比较懵逼,我看有人开到1e5就过了,这个大概要随缘吧……

1 //Achen
2 #include<algorithm>
3 #include<iostream>
4 #include<cstring>
5 #include<cstdlib>
6 #include<vector>
7 #include<cstdio>
8 #include<queue>
9 #include<cmath>
10 #include<set>
11 #include<map>
12 #define Formylove return 0
13 #define For(i,a,b) for(int i=(a);i<=(b);i++)
14 #define Rep(i,a,b) for(int i=(a);i>=(b);i--)
15 #define eps 1e-15
16 const int N=1e4+7;
17 typedef long long LL;
18 typedef double db;
19 using namespace std;
20 int n;
21 db E,s[N],k[N],v[N],x[N];
22
23 template<typename T>void read(T &x) {
24 char ch=getchar(); x=0; T f=1;
25 while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
26 if(ch=='-') f=-1,ch=getchar();
27 for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
28 }
29
30 int dcmp(db x) { return fabs(x)<=eps?0:(x>0?1:-1); }
31
32 void get_x(db lmd) {
33 lmd=1.0/lmd;
34 For(i,1,n) {
35 db l=max(0.0,v[i]),r=1e5;
36 For(ti,1,80) {
37 db mid=(l+r)/2.0;
38 if(dcmp(k[i]*mid*mid*2*(mid-v[i])-lmd)<=0) l=mid;
39 else r=mid;
40 }
41 x[i]=l;
42 }
43 }
44
45 int ck(db lmd) {
46 get_x(lmd);
47 db tp=E;
48 For(i,1,n)
49 tp-=k[i]*(x[i]-v[i])*(x[i]-v[i])*s[i];
50 return dcmp(tp)>=0;
51 }
52
53 int main() {
54 #ifdef ANS
55 freopen(".in","r",stdin);
56 freopen(".out","w",stdout);
57 #endif
58 read(n);
59 scanf("%lf",&E);
60 For(i,1,n)
61 scanf("%lf %lf %lf",&s[i],&k[i],&v[i]);
62 db l=0,r=1e5,lmd;
63 For(ti,1,80) {
64 lmd=(l+r)/2.0;
65 if(ck(lmd)) r=lmd;
66 else l=lmd;
67 }
68 get_x(lmd);
69 db ans=0;
70 For(i,1,n) ans+=s[i]/x[i];
71 printf("%.6lf\n",ans);
72 Formylove;
73 }
和上道题一样的模板
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 从零开始开发一个 MCP Server!
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档