首页 > 其他分享 >分治法求最大连续子序列的积

分治法求最大连续子序列的积

时间:2024-10-19 15:46:35浏览次数:9  
标签:right int max sum 分治 序列 left boarder 法求

1.源代码

#include <iostream>
#include <vector>
#include<string>
#include<sstream>
using namespace std;


int max3(int num1, int num2, int num3) {
    if (num1 > num2) {
        num2 = num1;
    }
    return num2 > num3 ? num2 : num3;
}

int max_sub_sum(vector<int> &a, int str, int end) {
    if (str == end) {
        if (a[str] < 0) {
            return 0;
        }
        else {
            return a[str]; 
        }
    }
    else {
        int max_left_sum, max_right_sum;
        int mid = (str + end) / 2;

        //下面的是求左右两边的子序列的最大连续子序列的和的算法
        max_left_sum = max_sub_sum(a, str, mid);        
        max_right_sum = max_sub_sum(a, mid + 1, end);
        

        //下面的是求中间跨越的最大连续子序列和的算法,和求左右两边的子序列的最大连续子序列的和无关
        int max_left_boarder_sum = 0, max_right_boarder_sum = 0;
        int left_boarder_sum = 1, right_boarder_sum = 1;
        for (int i = mid; i >= str; i--) {
            left_boarder_sum *= a[i];

            if (left_boarder_sum > max_left_boarder_sum) {
                max_left_boarder_sum = left_boarder_sum;
            }
        }
        for (int i = mid + 1; i <= end; i++) {
            right_boarder_sum *= a[i];


            if (right_boarder_sum > max_right_boarder_sum) {
                max_right_boarder_sum = right_boarder_sum;
            }
        }

        int max_mid_sum = max_left_boarder_sum * max_right_boarder_sum;

        return max3(max_left_sum, max_mid_sum, max_right_sum);

    }
}

int main() {
    cout << "第一组测试为学号(转专业)"<<endl; //学校作业
    cout << "输入你要测试的组数:";
    int t;
    vector<int>a;
    string line;
    cin >> t;
    int i = 1;
    while (t--)
    {
        cout << "输入第" << i << "组要求的最大连续子序列的积的序列:";
        i++;
            cin.ignore();
            getline(cin, line);
            if (line.empty())
            {
                break;
            }
            stringstream ss(line);
            int num;
            while (ss >>num) //将字符串转换为整数
            {
                a.push_back(num);
            }
            int value = max_sub_sum(a, 0, a.size() - 1);
            a.clear();//清空动态数组a的元素
            cout << "最大连续子序列积为:" <<value << endl<<'\n';
    }
    system("pause");
    return 0;
}

2.运行结果:

3.一张自己画的用来理解的图

标签:right,int,max,sum,分治,序列,left,boarder,法求
From: https://blog.csdn.net/qq_35986034/article/details/143079611

相关文章

  • .net Web API自动反序列化xml传参为C#实体
    Program.cs.net8.0已经内置了XML解析器,所以直接在services.AddControllers()后调用AddXmlSerializerFormatters()即可:services.AddControllers().AddXmlSerializerFormatters();定义实体需要用到几个特性:XmlRoot:xml的根节点XmlElement:xml的成员例:<soapenv:Envelopexm......
  • 分治---归并排序
    参考资料水平有限,欢迎交流!【如何优雅地排序——3分钟看懂【归并排序】的基本思想】练习题P1177【模板】排序-洛谷|计算机科学教育新生态(luogu.com.cn)LCR170.交易逆序对的总数-力扣(LeetCode)关键步骤与应用步骤在归并过程中,主要包含两个关键步骤:分割(Divide):将......
  • P1439 【模板】最长公共子序列
    首先考虑动态规划,a[i]==b[j],f[i][j]=f[i-1][j-1]+1,否则f[i][j]=max(f[i-1][j],f[i][j-1]);然后看了一眼数据范围,被卡的实施的,然后考虑优化,看到题目是一个排列于是不要考虑重复的问题,于是只在b里看,如果b[i]在a中的位置,小于我们维护的最长的就不行,否则的话直接加入我们维护的最长......
  • 【数据结构】分治算法经典: 快速排序详解
    快速排序(Quicksort)是一种高效的排序算法,最早由TonyHoare在1960年提出。它采用了分治(DivideandConquer)策略,平均时间复杂度为O(nlog......
  • java_day16_IO、序列化
    一、IO流IO流划分IO流【输入输出流】:按照流向划分:输入流:外部数据->java程序输出流:java程序->外部数据按照数据类型划分【根据使用记事本打开是否能够看懂来决定】字节流【万能流】:字节输入流:InputStream【抽象类】-......
  • 代码随想录算法训练营 | 115.不同的子序列,583. 两个字符串的删除操作,72. 编辑距离
    115.不同的子序列题目链接:115.不同的子序列文档讲解︰代码随想录(programmercarl.com)视频讲解︰不同的子序列日期:2024-10-18想法:dp[i][j]表示以s[i-1],t[j-1]结尾的s,t自学列中满足s的子序列为t的个数,如果s[i-1],t[j-1]相等,那么个数应该跟双方上一个结尾状态dp[i-1][j-......
  • 泛型、序列化和反序列化
    一、泛型1.泛型概念①Java泛型(Generics) 是JDK5中引入的一个新特性。③定义类或者接口时可以使用泛型,通过继承或者实现,减少了冗余代码,提高了代码的复用性。④Java不能创建具体类型的泛型数组List[]li2=newArrayList[];类型形参:定义参数时不指定具体的类型,使......
  • 【智能算法应用】鸭群算法求解二维路径规划问题
    摘要本文研究了鸭群算法在二维路径规划问题中的应用,旨在解决复杂障碍环境下的最优路径搜索问题。通过模拟鸭群觅食行为,鸭群算法能够有效避开障碍物,找到最短路径。实验结果表明,鸭群算法在路径规划中表现出较快的收敛速度和较优的路径规划效果,适用于多种复杂环境下的路径优化......
  • 【智能算法应用】引力搜索算法求解二维路径规划问题
    摘要引力搜索算法(GSA)是一种基于引力学说的启发式算法,用于解决复杂的优化问题。本文应用GSA于二维路径规划问题,通过优化路径来避开障碍物并达到目标点。实验结果表明,GSA在路径规划中具有良好的表现,尤其在多障碍场景中,其优化路径平滑且避障效果显著。理论引力搜索算法是......
  • 从组合优化问题建模到贪心法求解以简单调度为例
    此为课题组所指导本科生和低年级硕士生学习组合优化问题汇报所用教材:北京大学屈婉玲教授《算法设计与分析》课程资料:https://www.icourse163.org/course/PKU-1002525003承诺不用于任何商业用途,仅用于学术交流和分享更多内容请关注课题组官方中文主页:https://JaywayXu.github.......