算法设计与分析 第二章作业

计科2201 王玥心 2022级 2023-10-26 22:22:28

1.最大子段和:

#include <bits/stdc++.h>
using namespace std;
#define MAX 10010
int a[MAX];

int main(){
    int n;
    cin>>n;
    int flag=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]>0) flag=1;
    }

    if(flag==0)    cout<<0;
     else {
         int sum=0;
         int b=0;
         for(int i = 0;i < n;i++)
    {
        if(b > 0)    b= b+a[i];
        else    b = a[i];        
        if(b > sum)    sum = b;
    }
         cout<<sum;
     }
    return 0;
}

2.时间复杂度  O(n)

3.分治法:

基本思想:

将一个规模为n的问题分解为k个规模较小的子问题,子问题相互独立且与原问题相同

递归求解这些子问题,然后将各子问题的解合并得到原问题的解

一般使用递归算法

思考:

如何合理地拆分问题,使子问题规模都大致相同  是我们敲代码之前需要思考清楚的东西

考虑到递归算法 需要担心 最坏情况  时间复杂度的计算

必要时候使用备忘录   提高效率  减少重复数据的多次计算  节省资源

...全文
50 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

434

社区成员

发帖
与我相关
我的任务
社区描述
广东外语外贸大学信息科学与技术学院
算法 高校
社区管理员
  • brisksea
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧