51nod 1050 循环数组最大子段和
虽然是板子题,两种做法,我们先写一种,另一个咕咕。
因为是循环,所以分为两种,中间的和两边的,中间的直接dp求最大,两边的转化一下就是总的数字和减去中间的最小数字和。
#include <bits/stdc++.h> using namespace std; #define ll long long ll a[500005]; int n; int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } ll ans=0; ll mx=INT_MIN,cmx=0; ll mi=INT_MAX,cmi=0; for (int i=1;i<=n;i++) { cmx=max(a[i],cmx+a[i]); mx=max(mx,cmx); cmi=min(a[i],cmi+a[i]); mi=min(mi,cmi); ans+=a[i]; } if(mx<0){ cout<<0; } else{ cout<<max(mx,ans-mi); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」