PAT A1007 Suma máxima subsecuente (25 puntos) (programación dinámica)

Inserte la descripción de la imagen aquí
DP resuelve la mayor suma de subcolumnas continuas

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 100010;

int n;
int arr[maxn];
int dp[maxn];

int main(){
    
    
	scanf("%d", &n);
	for(int i=0; i<n; i++){
    
    
		scanf("%d", &arr[i]);
	}
	
	int flag = 0;
	for(int i=0; i<n; i++){
    
    
		if(arr[i] >= 0){
    
    
			flag = 1;
			break;
		}
	}
	if(!flag){
    
    
		printf("0 %d %d", arr[0], arr[n-1]);
		return 0;
	}
	
	int first, end;
	dp[0] = arr[0];
	for(int i=1; i<n; i++){
    
    
		dp[i] = max(arr[i],dp[i-1]+arr[i]);
	}
	int MAX = -1;
	int index;
	for(int i=0; i<n; i++){
    
    
		if(dp[i] > MAX){
    
    
			MAX = dp[i];
			index = i;
		}
	}
	end = arr[index];
	for(int i=index; i>=0; i--){
    
    
		if(dp[i] == arr[i]){
    
    
			first = arr[i];
			break;
		}
	}
	printf("%d %d %d", MAX, first, end);
	
	return 0;
} 

Supongo que te gusta

Origin blog.csdn.net/weixin_45964844/article/details/113859013
Recomendado
Clasificación