类似问题 最长公共子序列 洛谷P1439
P1439 【模板】最长公共子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<iostream>
using namespace std;
typedef struct dp{
int place, val;
};
int main(){
int t;
cin>>t;
for(int j=0;j<t;j++)
{
int n, a[100005];
dp dp[100005];
cin>>n;
for (int i = 0; i < n; i++)
cin>>a[i];
dp[0].val = a[0];dp[0].place = 0;
for (int i = 1; i < n; i++)
if (dp[i - 1].val + a[i] < a[i])
{
dp[i].place = i;
dp[i].val = a[i];
}
else
{
dp[i].place = dp[i - 1].place;
dp[i].val = dp[i - 1].val + a[i];
}
//相当于dp[i] = max(dp[i-1]+a[i],a[i]);
int begin,end,max_n=-1001;//begin end 框选子序列范围
for (int i = 0; i < n; i++)
if (dp[i].val>max_n)
{
max_n = dp[i].val;
begin = dp[i].place;
end = i;
}
cout<<"Case"<<" "<<j+1<<":"<<endl;
cout<<max_n<<" "<<begin+1<<" "<<end+1<<endl;
if (t-j-1)
cout<<endl;
}
return 0;
}