【分治算法】例子
来源:互联网 发布:linux关闭防火墙 编辑:程序博客网 时间:2024/06/05 00:53
分治策略:
①、将问题分解成若干个小的子问题,每个子问题与大问题同型(所以里面可以用递归),但规模更小
②、递归解决这些子问题
③、将子问题的解答合并,获得大问题的解答
/*最大字段和问题*/#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std;int a[100];int maxsum_dac(int a[],int left,int right){int sum=0;int mid;int leftsum=0,rightsum=0; //leftsum存放左子数组的最大字段和,rightsum存放右子数组的最大字段和。 int s1=0,s2=0;int lefts=0,rights=0; //在mid和mid+1往两边查找过程中,lefts,rights分别存放在寻找左数组最大字段和和寻找右数组最大字段和的过程过当前找到的值,它会不断更新 int i;if(left==right){sum=a[left]>0?a[left]:0;// if(a[left]>0){// sum=a[left];// }// else// sum=0;}else{mid=(left+right)/2;leftsum=maxsum_dac(a,left,mid);rightsum=maxsum_dac(a,mid+1,right);for(i=mid;i>=left;i--){lefts=lefts+a[i];if(lefts>s1)s1=lefts;}for(i=mid+1;i<=right;i++){rights=rights+a[i];if(rights>s2)s2=rights;}sum=s1+s2;if(sum<leftsum)sum=leftsum;if(sum<rightsum)sum=rightsum;}return sum; //返回数组中的最大字段和sum }int main() {int i=1,k,sum=0;char c; cout<<"请输入任意个数的一组数据!(小于100个)"<<endl; do { cin>>a[i++]; c=getchar(); }while(c!='\n'); i--; sum=maxsum_dac(a,1,i); cout<<"给定数组的最大字段和是:"<<sum<<endl;}
阅读全文
0 0
- 分治算法例子集锦
- 分治算法例子集锦
- 【分治算法】例子
- 算法-递归分治(经典例子)
- 最大子序列求解及分治算法的一些例子
- 分治算法(概念、特性、步骤、复杂度分析、经典例子)
- 分治算法
- 分治算法
- 分治算法?
- 【算法】分治
- 【算法】分治
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- super-diamond
- Unity 滑动窗口
- webpack入坑之旅(三)webpack.config入门
- JVM(3):Java GC算法 垃圾收集器
- webpack入坑之旅(四)扬帆起航
- 【分治算法】例子
- webpack入坑之旅(二)loader入门
- JAVA的String 类全知道
- webpack入坑之旅(六)配合vue-router实现SPA
- 2017-6-6-反思一波
- 城市文化笔记整理(二)
- webpack入坑之旅(五)加载vue单文件组件
- 第七十九天 : httpd 基础入门
- webpack-- 模块热替换