The largest continuous part and

MCS (Most Continuous Sum )

MAX SUM
diagram

code


#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>

using namespace std;

const int N = 1e5 + 10;

int f[N], w[N];
int t, n, th;

int main()
{
    
    
	cin >> t;
	
	while(t --)
	{
    
    
		cin >> n;
		int l = 0, r = 0, sum = -2000;
		for(int i = 1; i <= n; i ++)
		{
    
    
			cin >> w[i];
			f[i] = max(f[i-1] + w[i], w[i]);
			if(f[i] > sum)
			{
    
    
				sum = f[i];
				r = i;
			}
		}
		
		int tem = 0;
		
		for(int j = r; j >= 1; j --)
		{
    
    
			tem += w[j];
			if(tem == sum)
			{
    
    
				//因为要找最左边的l所以就不break了
				l = j;
			}
		}
		printf("Case %d:\n", ++th);
		printf("%d %d %d\n", sum, l, r);
		//切记这里需要空两行
		if(t != 0)
		{
    
    
			printf("\n");
		}
	
	}
	
	return 0;
}

Guess you like

Origin blog.csdn.net/qq_63092029/article/details/128604247