zoukankan      html  css  js  c++  java
  • 最长子序列和问题

    分而治之:分区间计算每个区间的最大和

    #include <bits/stdc++.h>
    #define REP(i, a, b) for(int i = a; i < b; i++)
    #define REP_(i, a, b) for(int i = a; i <= b; i++)
    #define sl(n) scanf("%lld", &n);
    #define si(n) scanf("%d", &n);
    #define RepAll(a) for(auto x: a)
    #define cout(ans) cout << ans << endl;
    typedef long long ll;
    using namespace std;
    int find_maximum_subbarray(int *a,int left, int right)
    {
        if(left ==  right)
            return a[left];
    
            int mid = (left + right) >> 1;
            int left_sum = -0x3f3f3f3f;
            int sum = 0;
            int left_max, right_max;
    
            int lans = find_maximum_subbarray(a,  left,  mid);
            int rans = find_maximum_subbarray(a,  mid+1, right);
    
            for(int i = mid; i >= left; i--)
            {
                sum += a[i];
                if (sum > left_sum)
                {
                    left_sum = sum;
                    left_max = i;
                }
    
            }
            sum = 0;
            int right_sum = -0x3f3f3f3f;
            for(int i = mid+1; i <= right; i++)
            {
                sum += a[i];
                if (sum > right_sum)
                {
                    right_sum = sum;
                    right_max = i;
                }
            }
    
        int ans = left_sum + right_sum;
        if (lans > ans){
            ans = lans;
        }
        if (rans > ans){
            ans = rans;
        }
        return ans;
    }
    int main(){
        ll n;
        sl(n);
        int * a = new int [n];
        REP(i, 0, n){
            cin >> a[i];
        }
        cout << find_maximum_subbarray( a, 0, n-1);
    }

    题目:动态规划 dp

    #include <bits/stdc++.h>
    #define REP(i, a, b) for(int i = a; i < b; i++)
    #define REP_(i, a, b) for(int i = a; i <= b; i++)
    #define sl(n) scanf("%lld", &n);
    #define si(n) scanf("%d", &n);
    #define si(n) scanf("%d", &n);
    #define RepAll(a) for(auto x: a)
    #define cout(ans) cout << ans << endl;
    typedef long long ll;
    using namespace std;
    int main()
    {
        int n;
        si(n);
        int *a = new int [n];
        REP(i, 0, n)
        {
            cin >> a[i];
        }
        int ans = a[0];
        REP_(i, 1, n-1)
        {
            if(a[i - 1] > 0)
            {
                a[i] += a[i-1];
            }
            else
            {
                a[i] +=0;
            }
            if(a[i] > ans)
            {
                ans = a[i];
            }
        }
        cout << ans << endl;
        delete []a;
    }
    
  • 相关阅读:
    (转)-为什么分布式一定要有Redis?
    (九)redis使用lua脚本
    (八)redis实现分布式锁
    (七)面试题-Redis比较常见的面试题-转载
    (六)redis缓存穿透,击穿,雪崩以及解决方案
    (五)redis的主从复制
    (四)redis的数据持久化-RDB,AOF
    (三)redis的其他功能-Bitmap,HyperLogLog,GEO
    JsTracker
    Web开发者助手 FeHelper
  • 原文地址:https://www.cnblogs.com/ygbrsf/p/12583012.html
Copyright © 2011-2022 走看看