| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1523 人关注过本帖
标题:确定最大子序列和的位置 分治递归法实现 是确定位置啊,大家进来讨论吧
只看楼主 加入收藏
scau_grated
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2012-1-17
结帖率:40%
收藏
已结贴  问题点数:20 回复次数:3 
确定最大子序列和的位置 分治递归法实现 是确定位置啊,大家进来讨论吧
求最大子序列和,并确定其位置,高效算法的话DP和分治了
但是还要确定子序列的位置,即第几个元素到第几个元素
我用DP求出和还有位置,用分治也求出了和,但是求不出位置,一般情况可以确定,但是一些特殊情况就错了

先贴分治求最大子序列和的代码
程序代码:
//最大连续和子序列
//用分治递归法来求
#include <stdio.h>
#include <string.h>
int a[100010];
int k,j;
int flag;

int SUM(int x ,int y)
{
    int sum1,sum2,max;  int m;  int temp,L,R,i;
    if(y-x==1)  {p=q=x; return a[x]; }
   
   
    m=x+(y-x)/2;
    sum1=SUM(x,m); 
    sum2=SUM(m,y); 
    if(sum1>=sum2)  max=sum1; 
    else            max=sum2; 
   
    temp=0;L=a[m-1];k=m-1;   //p3是用于记录子序列的头
    for(i=m-1; i>=x; i--)    
    {   temp+=a[i]; if(temp>=L) L=temp;   }
   
    temp=0;R=a[m];j=m;      //q3是用于记录子序列的尾
    for(i=m; i<y; i++)       
    {   temp+=a[i]; if(temp>=R) R=temp; j=i;   }
   
    if(max>(L+R))  return max; 
    else           return (L+R); 
}

int main()
{
    int n; int i;  int max;  int t,T;
    scanf("%d",&T);
    for(t=1; t<=T; t++)
    {
        scanf("%d",&n);
        for(i=1; i<=n; i++)  scanf("%d",&a[i]);
        max=SUM(1,n+1);
        printf("Case %d:\n",t);
        printf("%d %d %d\n",max,p,q);
        if(t!=T)  printf("\n");
    }
    return 0;
}



搜索更多相关主题的帖子: 算法 include 元素 
2012-04-04 18:07
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:7 
确定位置dp也够了
2012-04-04 18:20
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:7 
又是最大子段和...你们慢慢讨论

重剑无锋,大巧不工
2012-04-04 18:34
scau_grated
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2012-1-17
收藏
得分:0 
后来我推导出来,只要把MAX定义为全局变量,把原来的int 函数改为 void 然后再定义两个begin end 变量来记录子序列的位置………………
原来很简单,想通了什么都简单………………
2012-04-05 23:11
快速回复:确定最大子序列和的位置 分治递归法实现 是确定位置啊,大家进来讨论吧 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025899 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved