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;
    }
    
    
  • 相关阅读:
    MySQl查询语句大全
    并发编程三
    并发编程二
    并发编程
    网络编程
    面向对象高级进阶
    python中的面向对象和面向过程
    为什么还需要学习TypeScript
    Chrome 神器,神奇的技巧
    vue-property-decorator知识梳理
  • 原文地址:https://www.cnblogs.com/lcchy/p/10139475.html
Copyright © 2011-2022 走看看