提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、动态规划法
  • 二、分治法
  • 三、程序总代码
  • 总结

前言

本次将对最大字段和使用C语言实现的两种方法实现,动态规划法和分治法,两种方法所反映和表现是不同的想法和做法,但是动态规划法的时间复杂度更低,那并不是说分治法就不行,相反只是在解答最大字段和的时候没有动态规划法来的高效罢了。代码都比较的好理解,认真看都能看得懂,这里就不解释了!


一、动态规划法

int maxsum2(int a[],int left,int right)
{int first = left + 1;int total = right - left + 1;int b[100];int sum = 0;b[left] = a[left];int i, j;for (i = first;i <= right;i++){b[i]=(b[i-1] + a[i]) > 0 ? (b[i-1] + a[i]) : a[i];}for (j = left;j <= right;j++){sum = sum > b[j] ? sum : b [j] ;}return sum;
}

二、分治法

int maxsum1(int a[], int left, int right)
{int leftsum, rightsum, midsum;int mid;int i, j;int temporary1=0, temporary2=0;int sum1=0, sum2=0,sum;if (left == right){sum = a[left];}else {mid = (left + right) / 2;leftsum = maxsum1(a, left, mid);rightsum = maxsum1(a,mid+1,right);for (i = mid;i >= left;i--){sum1 += a[i];temporary1 = sum1 > temporary1 ? sum1:temporary1;}for (j = mid + 1;j <= right;j++){sum2 += a[j];temporary2 = sum2 > temporary2 ? sum2 : temporary2;}midsum = temporary1 + temporary2;if (leftsum > rightsum ){sum = leftsum;}else {sum = rightsum;}if (sum < midsum){sum = midsum;}}return sum;
}

三、程序总代码

#include<stdio.h>
int maxsum1(int a[], int left, int right);           //分治法求最大字段和
int maxsum2(int a[], int left, int right);           //动态规划法求最大字段和
int main()
{int a[10];int max;for (int i = 0;i < 10;i++){scanf("%d", &a[i]);}for (int j = 0;j < 10;j++){printf("%d ", a[j]);}//max=maxsum1(a, 0, 9);max = maxsum2(a,0,9);printf("\n%d", max);return 0;
}
int maxsum1(int a[], int left, int right)
{int leftsum, rightsum, midsum;int mid;int i, j;int temporary1=0, temporary2=0;int sum1=0, sum2=0,sum;if (left == right){sum = a[left];}else {mid = (left + right) / 2;leftsum = maxsum1(a, left, mid);rightsum = maxsum1(a,mid+1,right);for (i = mid;i >= left;i--){sum1 += a[i];temporary1 = sum1 > temporary1 ? sum1:temporary1;}for (j = mid + 1;j <= right;j++){sum2 += a[j];temporary2 = sum2 > temporary2 ? sum2 : temporary2;}midsum = temporary1 + temporary2;if (leftsum > rightsum ){sum = leftsum;}else {sum = rightsum;}if (sum < midsum){sum = midsum;}}return sum;
}int maxsum2(int a[],int left,int right)
{int first = left + 1;int total = right - left + 1;int b[100];int sum = 0;b[left] = a[left];int i, j;for (i = first;i <= right;i++){b[i]=(b[i-1] + a[i]) > 0 ? (b[i-1] + a[i]) : a[i];}for (j = left;j <= right;j++){sum = sum > b[j] ? sum : b [j] ;}return sum;
}

总结

记录自己的学习!

C语言实现最大字段和(动态规划法和分治法)相关推荐

  1. 最近点对问题(蛮力法和分治法)

    最近点对问题(蛮力法和分治法) 1.一维空间 1.1蛮力法 1.2分治法 2.二维空间 代码参考链接: http://t.csdn.cn/flREB 1.一维空间 1.1蛮力法 代码: import ...

  2. 二分法和分治法概念区别--记录

    1.二分法和分治法的概念区别: 二分搜索每次都要舍弃一半,从留下的一半中寻找目标:而分治法把一个大问题分成两个或多个小问题,递归地求这些小问题的解,最后再把它们小心谨慎的合并起来,并且要仔细考虑合并时 ...

  3. 动态规划和分治法,贪心算法以及递归的再一次深刻理解和体会

    每次体会算法都有新的感觉,刷题越多,对算法的理解感觉也就越深刻. 下面我们来重新体会下分治法,动态规划,贪心法,递归的理解. 1.分治法: 将问题分成单独的阶段,每个阶段互相不干扰很独立,如10米长的 ...

  4. 计算机基础 - 动态规划、分治法、memo

    动态规划 ≈ 分治法 + memo def memo(func):cache = {}def wrap(*args):if args not in cache:cache[args] = func(* ...

  5. 动态规划和分治法的区别

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 动态规划也是一种分治思想(比如其状态转移方程就是一种分治),但与分治算法不同的是,分治算法是把原问题分解为若干个子问题, ...

  6. 最大子段和(动态规划及分治法)

    动态规划法: 首先给一个任意的序列来说明这个问题 1 2 3 -1 -5 4 5 8 首先设一个dp数组,dp[i]表示前i个区间的最大子段和 如果dp[i-1] > 0,那么dp[i] = d ...

  7. 最大元和最小元(直接求解法和分治法)

    给定一个数组,求数组中的最大元和最小元(即最大值和最小值) 法1:直接求解 #include<iostream> using namespace std;int main(){int n, ...

  8. 主元素问题(蒙特卡洛法和分治法)

    主元素问题描述 设T为一个有n个元素的数组,当T中某个元素x的个数大于n/2时,称x为T的主元素. 蒙特卡洛算法简介 蒙特卡洛算法(Monte Carlo),是一种不确定性化算法,并无法保证一定能够得 ...

  9. Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)

    1.问题描述 写一个高效的算法,从一个 m×n m\times n的整数矩阵中查找出给定的值,矩阵具有如下特点: 每一行从左到右递增. 每一列从上到下递增. 2. 方法与思路 2.1 二分查找法 根据 ...

最新文章

  1. 客户关系管理系统-CRM源码
  2. oracle触发器监听数据变化,【Trigger】利用Oracle的触发器,自动记录数据的变动履历...
  3. React Native发布重构路线图
  4. Flask 第三方组件之 WTForms
  5. function函数嵌套 matlab_Matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题...
  6. Telephone Wire(POJ-3612)
  7. 优秀案例|如何让网页首屏更具视觉吸引力?
  8. CDM是什么?和CDP有什么区别?
  9. HDU-3337 Guess the number 测试输入数据
  10. 深度操作系统 V15.11发布——心随意动 畅享云端
  11. Java 开发必看的 5个 Github 开源项目
  12. 超声波测距模块工作原理
  13. 看华为心声社区的几篇总裁办电子邮件有感
  14. 九宫八阵图之龙飞阵--异常流量管理系统
  15. 通俗易懂spring之singleton和prototype
  16. 计算机画图怎样更改文字,如何在图片上改字|超简单的修改图片里文字方法
  17. 珊瑚虫工作室_2007-12-24
  18. 虚拟展厅三维交互体验满足用户多场景营销需求
  19. java 生成水印图片工具类, MultipartFile接收上传的图片,处理成加水印之后的MultipartFile
  20. 数据库分析之逻辑结构设计

热门文章

  1. CENT OS 8 Stream 安装部署 Zabbix 6.0 LTS
  2. 天若OCR 5.0 出现“该区域未发现文本”处理经过
  3. host 计算机英语作文,英语作文_英文天天写:Host_沪江英语
  4. ACM比赛中常见的错误
  5. 零基础入门python3.7 ——基础知识总结(十二) 函数进级
  6. 错过这15个顶级Python库,你就不算Python程序员
  7. 合并k个排序链表(Python实现)
  8. java事件源_java中什么是事件源,事件的处理过程是什么
  9. 升级MIUI12.5增强版教程
  10. IDEA新手入门教程总结