题意:给定数组a,求p·ai + q·aj + r·ak的最大值,i ≤ j ≤ k。
解:先确定两边再确定中间,两边的话到每个位置最大值是确定的,可以提前计算;枚举每个数作为aj,直接计算答案即可。需要注意的是有符数,最小值要设的足够小。不知道为什么放在背包问题里诶。
代码:

#include <bits/stdc++.h> using namespace std; #define maxx 100005 #define maxn 25 #define maxm 205 #define ll long long #define inf 0x3f3f3f3f3f3f3f3f #define mod 2520 ll a[maxx]={0},b[maxx]={0},c[maxx]={0}; signed main() { // int T; // scanf("%d",&T); // while(T--) { // // } ll n,p,r,q; scanf("%lld%lld%lld%lld",&n,&p,&q,&r); for(int i=1;i<=n;i++){ scanf("%lld", &a[i]); } for(int i=0;i<=n+1;i++){ b[i]=c[i]=-inf; } for(int i=1;i<=n;i++){ b[i]=max(b[i-1],a[i]*p); } for(int i=n;i>0;i--){ c[i]=max(c[i+1],r*a[i]); } ll ans=-inf; for(int i=1;i<=n;i++){ ans=max(ans,b[i]+c[i]+q*a[i]); } printf("%lld\n",ans); return 0; } //dp[pos][lcm][mod]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?