Ãִ뱸°£ 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);
}