问题:输入一个整数数组,求出子连续序列和的最大值。
解:
最大子序列和即为mem table中的最大值,此处为14.
代码如下:
1 #include<stdio.h> 2 3 static const int array[]={-1,-2,3,-1,2,1,-2,10,-8,-3,12}; 4 static int mem_table[2][11]; 5 6 static int f(int i){ 7 8 if(i<0) return array[0]; 9 if(mem_table[0][i]) 10 return mem_table[1][i]; 11 if(i==0){ 12 mem_table[1][i]=array[0]; 13 mem_table[0][i]=1; 14 return mem_table[1][i]; 15 } else { 16 int i_1; 17 i_1=f(i-1); 18 mem_table[1][i]=(i_1>0)?(i_1+array[i]):array[i]; 19 mem_table[0][i]=1; 20 return mem_table[1][i]; 21 } 22 23 } 24 25 int main(){ 26 27 //mem table init 28 int i,j; 29 for(i=0;i<2;i++) 30 for(j=0;j<11;j++) 31 mem_table[i][j]=0; 32 33 //dump 34 printf("table:\n"); 35 for(i=0;i<2;i++) { 36 printf("\t"); 37 for(j=0;j<11;j++) 38 printf("%5d ",mem_table[i][j]); 39 printf("\n"); 40 } 41 42 //worker 43 printf("result:%d\n",f(10)); 44 45 //dump 46 printf("table:\n"); 47 for(i=0;i<2;i++) { 48 printf("\t"); 49 for(j=0;j<11;j++) 50 printf("%5d ",mem_table[i][j]); 51 printf("\n"); 52 } 53 54 }
时间: 2024-11-10 10:04:43