ABC366F Maximum Composition 题解
ABC366F Maximum Composition 题解
题目大意#
给定 个一次函数 ,从中选出 个函数 ,使得 最大,求最大值。
Solve#
考虑这样一种情况:我已经选定 ,现在要去选 和 ,那么对于候选的 ,怎么选更优?
令 。那么选 更优当且仅当
故我们贪心地按 的规则将 排序,即可确定嵌套的先后顺序,排在前面的嵌套时更靠里。
既然我们已经知道了先后顺序,求最值可以 dp 求解。
设 表示仅从前 个函数里选, 的最大值。则有 。
Code#
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
short f=1;
int x=0;
char c=getchar();
while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
const int N=2e5+10,K=15;
int n,m,tot;
long long f[K];
struct zzn{int a,b;}a[N];
bool cmpp(zzn x,zzn y){return x.b*(y.a-1)>y.b*(x.a-1);}
signed main()
{
n=read();m=read();
for(int i=1;i<=n;i=-~i) a[i]={read(),read()};
sort(a+1,a+n+1,cmpp);
f[0]=1;
for(int i=1;i<=n;i=-~i)
for(int j=m;j;j--)
f[j]=max(f[j],f[j-1]*a[i].a+a[i].b);
return printf("%lld",f[m]),0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】