求最大子序列和
来源:互联网 发布:网络写手新手指南 编辑:程序博客网 时间:2024/05/08 17:28
/*功能:求最大子序列和*/
#include<stdio.h>
#include<stdlib.h>
/*立方法*/
static int max_sum1(int *array,int n)
{
int i,j;
int sum=0;
for(i=0;i<n;i++){
for(j=i;j<n;j++){
int k;
int sub_sum=0;
for(k=i;k<=j;k++){
sub_sum+=array[k];
}
if(sum<sub_sum) sum=sub_sum;
}
}
return sum;
}
/*平方法之一:array[i->j]=array[i->j-1]+array[j]*/
static int max_sum2a(int *array,int n)
{
int sumsofar=0;
int i,j;
for(i=0;i<n;i++){
int subsum=0;
for(j=i;j<n;j++){
subsum+=array[j];
if(sumsofar<subsum) sumsofar=subsum;
}
}
return sumsofar;
}
/*平方法之二:assist_array[i]代表array[0->i]*/
static int max_sum2b(int *array,int n)
{
int *tmp_arr=(int *)malloc(sizeof(int)*(n+1));
int *assist_arr=tmp_arr+1;
assist_arr[-1]=0;
int i;
for(i=0;i<n;i++){
assist_arr[i]=assist_arr[i-1]+array[i];
}
int sumsofar=0;
int j;
for(i=0;i<n;i++){
for(j=i;j<n;j++){
if(sumsofar<assist_arr[j]-assist_arr[i-1])
sumsofar=assist_arr[j]-assist_arr[i-1];
}
}
return sumsofar;
}
/*分治递归算法*/
static int max_sum3(int *array,int n)
{
if(n<1) return 0;
if(n==1) return (array[0]>0?array[0]:0);
int m=n/2;
int sum=0;
int left_max=0;
int i;
for(i=m;i>=0;i--){
sum+=array[i];
if(left_max<sum) left_max=sum;
}
int right_max=0;
sum=0;
for(i=m+1;i<=n-1;i++){
sum+=array[i];
if(right_max<sum) right_max=sum;
}
sum=left_max+right_max;
left_max=max_sum3(array,m);
right_max=max_sum3(array+m,n-m);
if(sum<left_max) sum=left_max;
if(sum<right_max) sum=right_max;
return sum;
}
/*线性算法*/
static int max_sum4(int *array,int n)
{
int max_endhere=0;
int maxsofar=0;
if(array[0]>0){
max_endhere=array[0];
maxsofar=array[0];
}
int i;
for(i=1;i<n;i++){
if(max_endhere+array[i]>0)
max_endhere+=array[i];
else
max_endhere=0;
if(max_endhere>maxsofar)
maxsofar=max_endhere;
}
return maxsofar;
}
int main(int argc,char *argv[])
{
int arr[]={31,-41,59,26,-53,58,97,-93,-23,84};
printf("%d\n",max_sum4(arr,10));
return 0;
}
- 求最大子序列和
- 求最大子序列和
- 求最大子序列和
- 求最大子序列和
- 求最大和子序列
- 求最大和子序列
- 求最大子序列和
- 求最大子序列和
- 求最大子序列和
- 求最大子序列和
- 求最大子序列和
- 求最大和子序列
- 求最大子序列和
- 求最大子序列和
- 求最大子序列和
- 子序列求最大和
- 求连续子序列最大和
- 联机算法求最大子序列和
- iPad2使用心得和应用推荐(不定期更新)
- 线程1例子
- 校园网络信息资源管理应用平台
- ubuntu解决打开windows记事本.txt文件乱码的方法
- 校园迷宫(rqnoj195)
- 求最大子序列和
- POJ 1861 Network (MST kruskal 加权合并 (瓶颈生成树))
- 美国西点军校的育人之道
- ARM-Linux驱动--Watch Dog Timer(看门狗)驱动分析
- DirectX骨骼动画演示,和渐进网格和增进网格的演示
- 系统架构之一(RPG游戏常用架构)
- 对比.net使用Java的匿名类对工厂方法模式提供更优雅的实现
- 如何显示维基百科图片
- C++读写文本