文章
20
粉丝
147
获赞
13
访问
52.7k
#include<bits/stdc++.h>
using namespace std;
const int maxn=110;
int a[maxn];
int dp[maxn],ansp,ansq,ans;
void DP(int n)
{
int p=0,q=0;
dp[0]=a[0];
ans=dp[0];
for(int i=1; i<n; i++)
{
if(a[i]>a[i]+dp[i-1]) //遇到一个数他可以覆盖前面数的和
{
dp[i]=a[i];
p=i;//更新起点
q=i;//更新终点
}
else
{
dp[i]=a[i]+dp[i-1];
q=i;//只需要更新右边界
}
if(ans<dp[i])
{
ans=dp[i];//每次都更新最大值;
ansp=p;
ansq=q;
}
}
}
int main()
{
int n;
while(cin>>n)
{
for(int i=0; i<n; i++)
{
cin>>a[i];
}
DP(n);
for(int i=ansp; i<=ansq; i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
cout<<ans<<endl;
}
}
登录后发布评论
暂无评论,来抢沙发