분할과 정복 이용해서 연속된 배열의 최대값구하는 건데
http://jungmonster.tistory.com/126
이거랑 같은 건데
나는 배열의 시작점과 끝점도 구해야되..
우선 내가 짠 건 이거구
#include <stdio.h>
int dq(int value[],int first,int last);
int max(int left, int right);
void main()
{
int n, i, sum;
printf("N : ");
scanf("%d",&n);
int* value = new int[n];
for(i=0;i<n;i++){
scanf("%d",&value[i]);
}
sum = dq(value,0,n-1);
printf("%d \n",sum);
}
int dq(int value[],int first,int last)
{
int mid,sum = 0,left = 0, right = 0;
int i,temp,r=0,l=0,j;
if(first == last) return value[first];
else {
mid = (first + last) / 2;
for(i=mid;i>=first;--i){
sum = sum + value[i];
if(left < sum) { left = sum; l = i; }
//left = max(left, sum);
}
sum = 0;
for(j=mid+1;j<=last;j++){
sum = sum + value[j];
if(right < sum) { right = sum; r = j; }
//right = max(right,sum);
}
int single = max(dq(value,first,mid),dq(value,mid+1,last));
printf("%d %d \n",l,r);
return max(left+right,single);
}
}
int max(int left, int right)
{
if(left > right) return left;
return right;
}
도와주세여~~ 어케 하면 시작부분과 끝부분 구할수있음?
댓글 0