클래식 dp - 최대 하위 섹션 및

1924 단어 dp

51Nod-1049


N개의 정수로 구성된 서열 a11, a22, a33,..., ann, 이 서열은 aii+ai+1i+1+...+ajj의 연속 자단과 최대 값을 구합니다.주어진 정수가 모두 음수일 때와 0이다.예를 들어 -2,11,-4,13,-5,-2와 가장 큰 자단은 11,-4,13이다.합은 20이다.Input 1행: 정수 시퀀스 길이 N(2 <= N <= 50000) 2- N + 1행: N개의 정수(-10^9 <= Aii <= 10^9) Output 출력 최대 하위 세그먼트 합.Sample Input 6 -2 11 -4 13 -5 -2 Sample Output 20
sum로 현재 하위 세그먼트와 0보다 작으면 sum=0,ans로 가장 큰 하위 세그먼트를 저장하면 됩니다. 롱롱 롱을 주의하세요.
#include
#include
using namespace std;
typedef long long ll;
int a[50050];
int main()
{
    ll n,sum=0,ans=0,i;
    scanf("%d",&n);
    for(i = 1;i <= n; i++)
        scanf("%d",&a[i]);
    for(i = 1;i <= n; i++)
    {
        sum += a[i];
        if(sum <= 0)
            sum = 0;
        else
            ans = max(ans,sum);
    }
    printf("%lld
"
,ans); return 0; }

좋은 웹페이지 즐겨찾기