zoukankan      html  css  js  c++  java
  • 顺序表应用7:最大子段和之分治递归法(SDUT 3664)

    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn = 50005;
    int num = 0;
    struct node
    {
        int *elem;
        int len;
    };
    void Creatlist(struct node &list, int n)
    {
        list.elem=new int[maxn];
        if(!list.elem)
            exit(OVERFLOW);
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&list.elem[i]);
            list.len++;
        }
    }
    int get_ans(struct node &list, int l, int r)
    {
        num ++;
        int sum1, sum2, sum3, sum4, mav3, mav4;
        if(l == r)
        {
            if(list.elem[l] < 0)
                return 0;
            else
                return list.elem[l];
        }
        int m = (l + r) / 2;
        sum1 = get_ans(list, l, m);
        sum2 = get_ans(list,m + 1, r);
        sum3 = sum4 = 0;
        mav3 = mav4 = 0;
        for(int i = m; i >= l; i --)
        {
            sum3 += list.elem[i];
            mav3 = max(mav3,sum3);
        }
        for(int i = m + 1; i <= r; i ++)
        {
            sum4 += list.elem[i];
            mav4 = max(mav4,sum4);
        }
        int ans = 0;
        ans = max(sum1, sum2);
        ans = max(ans, mav3 + mav4);
        return ans;
    }
    
    int main()
    {
        int n;
        struct node list;
       scanf("%d",&n);
        Creatlist(list, n);
        num = 0;
        int ans = get_ans(list,1,n);
        printf("%d %d
    ", ans, num);
        return 0;
    }
    
    
  • 相关阅读:
    【java基础】方法2
    【Java基础】方法
    [java基础]数组
    [Java基础]循环结构3
    [java基础]循环结构2
    [java基础]循环结构1
    [java基础]分支结构(2)
    mybatis-config.xml简单笔记
    applicationContext.xml简单笔记
    spring-servlet.xml简单示例
  • 原文地址:https://www.cnblogs.com/lcchy/p/10139475.html
Copyright © 2011-2022 走看看