求数组的子数组子和的max 动态规划程序 时间复杂O(n) 可以返回最大子数组位置
#include <stdio.h>
#include <stdlib.h>
int maxv(int x,int y)
{
return (x>y)?x:y;
}
int main()
{
int array[4]={-9,-2,-3,-5};
int i,j;
int flag[4][4]={0};
int flagcount=2;
int maxendinghere=array[0];
int maxall=array[0];
int maxendingflag=0;
int maxflag=0;
flag[0][0]=1;
int posx=0;
int posy=0;
int beg=0;
for(i=1;i<4;i++)
{
maxendinghere=maxv(array[i],maxendinghere+array[i]);
if(maxendinghere==array[i])
{
maxendingflag=2;
beg=i;
}
else
{
maxendingflag=3;
}
maxall=maxv(maxall,maxendinghere);
if(maxall==maxendinghere)
{
if(maxendingflag==2)
flag[i][i]= flagcount++;
else
flag[beg][i]= flagcount++;
}
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(flag[i][j]>maxflag)
{
maxflag=flag[i][j];
posx=i;
posy=j;
}
}
printf("max value:%d ",maxall);
printf("pos x %d,pos y %d",posx,posy);
system("PAUSE");
return 0;
}