码迷,mamicode.com
首页 > 其他好文 > 详细

02 最大连续子序列和 动态规划解法与数学证明

时间:2015-04-07 13:38:13      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

问题:输入一个整数数组,求出子连续序列和的最大值。

解:

技术分享

技术分享

技术分享

    最大子序列和即为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 }

 

02 最大连续子序列和 动态规划解法与数学证明

标签:

原文地址:http://www.cnblogs.com/SwordTao/p/4397930.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!