434
社区成员
发帖
与我相关
我的任务
分享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个规模较小的子问题,子问题相互独立且与原问题相同
递归求解这些子问题,然后将各子问题的解合并得到原问题的解
一般使用递归算法
思考:
如何合理地拆分问题,使子问题规模都大致相同 是我们敲代码之前需要思考清楚的东西
考虑到递归算法 需要担心 最坏情况 时间复杂度的计算
必要时候使用备忘录 提高效率 减少重复数据的多次计算 节省资源