Ãִ뱸°£ hint

- O(n^3)

ù¹ø° ÁÙ¿¡´Â NÀÌ ÀԷµȴÙ. ( 1 <=N <= 1,000 )
#include <stdio.h>

int main()
{
    int arr[100];
    int n, i, j, k, ans, sum;
    
    scanf("%d",&n); // µ¥ÀÌÅÍ °³¼ö 
    
    for( i=0 ; i < n ; i++ ) scanf("%d", &arr[i]); // µ¥ÀÌÅÍ ÀÔ·Â 
    
    ans = arr[0]; // µ¥ÀÌÅÍ ÃʱâÈ­ 
    
    // ´©Àû¹è¿­ÀÇ Â÷¸¦ ÀÌ¿ëÇØ ÃÖ´ë°ª ±¸Çϱâ
    for( i=0 ; i < n ; i++ )
        for( j=0 ; j < i ; j++ )
        {
            sum = 0; // sum ÃʱâÈ­ 
            for( k=j ; k < i ; k++) sum+=arr[k]; // jºÎÅÍ i±îÁöÀÇ ¹è¿­À» sum¿¡ ´õÇØÁØ´Ù. 
            if( ans < sum ) ans = sum; // ÃÖ´ë°ªÀ» ºñ±³ÇØÁØ´Ù. 
        }

    // ÃÖ´ë°ª Ãâ·Â 
    printf("%d\n", ans);
}

-----------------ºÎ¿¬¼³¸í------------------
¸Å Ƚ¼ö¸¶´Ù sumÀ» ´õÇؼ­ Á¤´äÀ» ±¸ÇØÁØ´Ù.

- O(n^2)

#include <stdio.h>

int main()
{
    int sum[100]={0,}, arr[100];
    int n, i, j, ans;
    
    scanf("%d",&n); // µ¥ÀÌÅÍ °³¼ö 
    
    for( i=0 ; i <  n ; i++ ) scanf("%d", &arr[i]); // µ¥ÀÌÅÍ ÀÔ·Â 
    
    for( i=0 ; i < n ; i++ ) // ´©Àû¹è¿­ »ç¿ë 
    {
        if( i==0 ) sum[i] = arr[i];
        else sum[i] = sum[i-1] + arr[i];
    }
    
    ans = arr[0]; // µ¥ÀÌÅÍ ÃʱâÈ­ 
    
    // ´©Àû¹è¿­ÀÇ Â÷¸¦ ÀÌ¿ëÇØ ÃÖ´ë°ª ±¸Çϱâ
    for( i=0 ; i < n ; i++ )
        for( j=0 ; j < i ; j++ )
            if( ans < sum[i] - sum[j] ) ans = sum[i] - sum[j]; 

    // ÃÖ´ë°ª Ãâ·Â
    printf("%d\n", ans);
}
----------- ºÎ¿¬ ¼³¸í --------------
´©Àû¹è¿­À» È°¿ëÇÑ´Ù. (¿¹¸¦ µé¾î arr[3]ºÎÅÍ arr[7]±îÁöÀÇ ÇÕÀº sum[7] - sum[2]ÀÌ´Ù.)

- O(n) À¸·Î ±¸ÇöÇϱâ

- Á¢±Ù ¹æ¹ý: dynamic programming 

- Á¡È­½Ä : dy[i] --µ¥ÀÌÅÍ ¹è¿­À» a[] ¶ó ÇÏ´Â °æ¿ì a[i] ¸¦ ±¸°£ÀÇ ³¡À¸·Î ÇÏ´Â °æ¿ì ÃÖ´ë °ª 
dy[i] = max ( dy[i-1] + a[i] , a[i]) 

- ´ä : dy[] Áß ÃÖ´ë°ª 

(a[i] °¡ ±¸°£ÀÇ ³¡À¸·Î µÎ´Â °æ¿ì ±âÁ¸ ±¸°£¿¡ ºÙ°Å³ª ȤÀº ´Üµ¶À¸·Î °¡´Â µÎ°¡Áö Áß ÃÖ´ë

   
¼Ò½º:
int main()
{
   int a[100],dy[100]={0},ans,i,n;

   //ÀÔ·Â
   scanf("%d",&n); //µ¥ÀÌÅÍ°³¼ö
   for( i = 1 ; i <= n ; i++){
      scanf("%d",&a[i]); 
   } 
   
   //ó¸®
   for( i = 1 ; i <= n ; i++){
      dy[i] = a[i] > a[i] + dy[i-1] ? a[i] : a[i] + dy[i-1];
   }

   //ÃÖ´ë°ª ã±â 
   ans = dy[1];
   for( i = 2 ; i <= n ; i++){
      if ( ans < dy[i] ) ans = dy[i];
   }

   //Ãâ·Â
   printf("%d\n",ans);
}

[ȨÀ¸·Î]  [µÚ ·Î]