典型题目:HDU - 1003
typedef long long ll;
typedef unsigned long long ull;
const ll maxn=100005;
ll a[maxn];
int main() {
ll t;
slld(t);
for(ll i=1;i<=t;i++) {
if(i!=1) pn();
ll n;
slld(n);
for(ll j=1;j<=n;j++) slld(a[j]);
ll ans=-INF;
ll sum=0;
ll Left=1,Right=1;
ll l=1;
for(ll j=1;j<=n;j++) {
sum+=a[j];
if(sum>ans) { //易错点,要先判是否满足最大条件
ans=sum;
Left=l;
Right=j;
}
if(sum<0) {
sum=0;
l=j+1;
}
}
printf("Case %lld:\n",i);
printf("%lld %lld %lld\n",ans,Left,Right);
}
return 0;
}
本文介绍了一个解决HDU-1003问题的C++实现方案,通过动态规划求解最大子序列和及其起始与结束位置。代码中使用了长整型变量来避免溢出,并通过滑动窗口的方式更新当前最优解。
1833

被折叠的 条评论
为什么被折叠?



