一.常见算法--动态规划

(1)0-1背包问题

问题描述:

0-1背包问题的描述:在n种物品中选择1个或0个第i种物品,装入背包容量为m的背包,使得背包价值达到最大。

思路与关键点:

用到了max函数,用于返回两个数之中的较大值,包含在头文件<algorithm>中。下面的代码用头文<bits/stdc++.h>,包含几乎所有常用头文件。其中,当然包含<algorithm>。思路:对于每一个物品,有两种选择,要么放,要么不放。可以把问题分解成从背包容量为j<m的问题,无论j怎么变,我们都取其中的最优解,直到j=m时,就可以得到问题的最优解了。

下面的代码内部循环一边输入第i个物品的价值和重量,一边给背包容量为j的背包更新对应的背包最大价值,从m递减到放不下第i个物品时,第i轮更新结束。当外部循环从1递增到n时,就得到了n种物品放入背包容量为m的问题的最优解。

代码:

#include<bits/stdc++.h>using namespace std;const int MAXN = 1005;
int f[MAXN];  // 建立一个长度为MAX的数组,每个元素都为0int main() 
{int n, m;  printf("请输入物品的个数和背包的容量:"); cin >> n >> m;
printf("\n物品的数量是:%d,背包的容量是:%d\n",n,m); for(int i = 1; i <= n; i++) {printf("请输入第%d个物品的价值和重量\n",i);int v, w;//v是物品的价值,w是物品的重量 cin >> v >> w;      // 边输入边处理printf("第%d个物品的价值是:%d,重量是:%d\n",i,v,w);     for(int j = m; j >= w; j--)f[j] = max(f[j], f[j - w] + v);//判断是否选择第j个物品 }//输出背包容量为m的最大价值 
printf("背包的最大价值为:%d\n",f[m]);return 0;
}

运行结果:

c2a02aef5ffc4eaaae9d086314bdb64c.jpeg

时间复杂度与空间复杂度分析:

时间复杂度为主要是两个for循环为0(_n{2}),空间复杂度主要为变量为O(1)

(2)最长公共子序列问题

问题描述:

给定任意两个字符串,求求按下标严格递增的最长子序列长。例如:ABC和ADB这两个最长公共子序列为AB。意思就是说可以跳着取字符,但字符在原字符串的顺序保持不变。

思路与关键点:

Strlen()函数用来求字符数组的长度的,在头文件<string.h>中。思路:对于求长度为n的字符串a和长度为m的字符串b,我们有两种选择。第一种,可以看作 子问题求a去掉最后一个字符得到的子串和b进行比较,找到最大公共子串长。第二种,可以看作 子问题求b去掉最后一个字符得到的子串和a进行比较,找到最大公共子串长。去掉的字符有可能是a和b的共同字符,这时记录的最长公共字符串长度要加一。

下面代码中,数组f[i][j]记录了字符串a的前i个字符和字符串b的前j个字符的最长公共子串长。通过两层for循环,遍历由字符串a和b组成的二维表,每次减少一个不同的字符相当于缩小一行或一列。每次减少一个相同的字符,相当于,减少一行和一列;我们每次减少一个字符时,都进行上面讨论的两种选择比较,找到二者的最大值。

代码:

#include<stdio.h>
#include<string.h>int max(int a,int b)
{return a>b?a:b;
}
int main()
{int i,j,k; char a[600];char b[600];int f[600][600];//f[i][j]表示a字符串的前i个字符和b字符串的前j个字符的最长子序列长度 printf("请输入字符串a和b\n"); while(scanf("%s %s",a,b)!=EOF)//不停地输入字符串,判断最长公共子串长 {int n=strlen(a);//计算字符串a的长度 int m=strlen(b);/*当任意一个字符串为空时,它们的公共子串长为0*/ for(i=0;i<=n;i++){f[i][0]=0;}for(i=0;i<=m;i++){f[0][i]=0;}/*不断缩小搜索范围。*/ for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(a[i-1]==b[j-1]){f[i][j]=f[i-1][j-1]+1;}else{f[i][j]=max(f[i-1][j],f[i][j-1]);}}}printf("最长公共子序列长度为:\n"); printf("%d\n",f[n][m]);printf("请输入字符串a和b\n"); }return 0;
}

运行结果:

时间复杂度与空间复杂度分析:

时间复杂度为主要是两个for循环为0(_n{2}),空间复杂度主要为二维数组为0(_n{2})

(3)最大子段和问题

问题描述:

思路与关键点:

我们要求连续的最大子段和,实际就是尽量找正数,跳过负数。所选的第一个数必然是正数。在下面的代码中,设置了一个临时变量b,用来存放当前的最大子段和。从0开始,遍历数组,b的初值为0,进入循环。b的值变为数组的第一个元素,如果第一个元素是正数,那么,更新sum的值为第一个元素的大小。如果是负数,就接着往后找,直到找到一个正数,开始计算后面的连续几个数的和,看看是否能够比当前的最大和sum大。如果比sum小,就不必更新sum。如果后面的数忽然出现负数,那么,一定会越加越小,最后小于0,就会从后面找到的第一个正数开始重新找连续的最大子段和。

代码:

#include<stdio.h>
int Maxsum(int n,int *a){int sum=0,b=0;for(int i=0;i<n;i++){if(b>0){b+=a[i];}else{b=a[i];}if(b>sum){sum=b;}}return sum;
}
int main(){int a[10]={1,2,6,9,0,-1,3,-2,9,8};int len=sizeof(a)/sizeof(a[0]); 
int Max=Maxsum(len,a);
printf("最大子段和为:%d\n",Max);
return 0;	
} 

运行结果:

时间复杂度与空间复杂度分析:

时间复杂度为0(n),空间复杂度主要为一维数组0(n)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/13401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为何Linux成为你不可或缺的技能

在数字化飞速发展的今天&#xff0c;无论你是IT行业的精英&#xff0c;还是其他领域的专业人士&#xff0c;掌握Linux都已经成为一项至关重要的技能。那么&#xff0c;为什么一定要学会Linux呢&#xff1f;以下文章仅供参考 1. 开源的力量&#xff1a;无限的可能性 Linux是一…

工厂自动化升级改造(3)-Modbus与MQTT的转换

什么是MQTT,Modbus,见下面文章 工厂自动化升级改造参考(01)--设备通信协议详解及选型-CSDN博客文章浏览阅读608次,点赞9次,收藏6次。>>特点:基于标准的以太网技术,使用TCP/IP协议栈,支持高速数据传输和局域网内的设备通信。>>>特点:跨平台的通信协议,…

ssl证书价格一年多少钱?如何申请?

由于行业新规&#xff0c;现在阿里云、腾讯云等几乎所有平台都不再提供一年期免费证书&#xff0c;如果需要一年期证书则需要支付一定的费用。SSL证书的价格根据类型不同几十到几百上千不等。 一年期SSL证书申请通道https://www.joyssl.com/?nid16 一年期SSL证书申请流程&am…

人工智能(一)架构

一、引言 人工智能这个词不是很新鲜&#xff0c;早就有开始研究的&#xff0c;各种推荐系统、智能客服都是有一定的智能服务的&#xff0c;但是一直都没有体现出多高的智能性&#xff0c;很多时候更像是‘人工智障’。 但是自从chatGpt3被大范围的营销和使用之后&#xff0c;人…

python常用基础知识

目录 &#xff08;1&#xff09;print函数 &#xff08;2&#xff09;注释 &#xff08;3&#xff09;input函数 &#xff08;4&#xff09;同时赋值和连续赋值 &#xff08;5&#xff09;type函数和id函数 &#xff08;6&#xff09;python赋值是地址赋值 &#xff08;…

Qt编译和使用freetype矢量字库方法

在之前讲过QT中利用freetype提取字库生成图片的方法&#xff1a; #QT利用freetype提取字库图片_qt freetype-CSDN博客文章浏览阅读1.2k次。这是某个项目中要用到的片段&#xff0c;结合上一篇文章#QT从字体名获取字库文件路径使用// 保存位图int SaveBitmapToFile(HBITMAP hBi…

【会议征稿,ACM出版】第四届人工智能,大数据与算法国际学术会议 (CAIBDA 2024, 7/5-7)

由河南省科学院、河南大学主办&#xff0c;河南省科学院智慧创制研究所、河南大学学术发展部、河南大学人工智能学院承办的第四届人工智能&#xff0c;大数据与算法国际学术会议 (CAIBDA 2024)将于2024年7月5-7日于中国郑州隆重举行。CAIBDA 2024致力于为人工智能&#xff0c;大…

碳纳米管须状触嗅觉多模态融合传感器在皮革奢侈品真伪鉴定下的设计探索

一、设计方案 1.传感器选择 触觉传感器&#xff1a;选择基于碳纳米管&#xff08;CNT&#xff09;聚合物的柔性MEMS触觉微传感器&#xff0c;由于碳纳米管具有高度的灵敏度和选择性、柔韧性&#xff0c;可以作为触觉传感器&#xff0c;检测材料的微观结构和机械特性。嗅觉传感…

网页打开:为什么国内用新标签页,国外用当前页?

想写这个话题很久了&#xff0c;因为用百度和Google搜索时&#xff0c;打开搜索结果链接时的交互差异&#xff0c;几乎每天都要提醍我一下。 网页打开——这个交互&#xff0c;在设计里&#xff0c;算是极微小&#xff0c;但影响极广泛的操作设计。甚至&#xff0c;因此形成了…

【Python】图形用户界面设计

1、设计并编写一个窗口程序,该窗口只有一个按钮,当用户单击时可在后台输出hello world. import tkinter as tk def on_button_click():print("hello world") # 创建主窗口 root tk.Tk() root.title("Hello World Button") # 设置窗口大小 root.geometry…

代码随想录-算法训练营day41【动态规划04:01背包问题-滚动数组、分割等和子集】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part04● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集 正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,…

SAP_SNOTE_补丁修复_全流程实战

SAP ABAP 顾问&#xff08;开发工程师&#xff09;能力模型-CSDN博客文章浏览阅读1.2k次。目标&#xff1a;基于对SAP abap 顾问能力模型的梳理&#xff0c;给一年左右经验的abaper 快速成长为三年经验提供超级燃料&#xff01;https://blog.csdn.net/java_zhong1990/article/d…

文字游侠AI丨简直是写作神器,头条爆文一键生成稳定赚米!附渠道和详细教程(只需四步)!

在数字时代的浪潮中&#xff0c;人们不断寻求网络空间中的商机&#xff0c;期望在互联网的浩瀚海洋里捕捉到稳定的财富。随着人工智能技术的突飞猛进&#xff0c;越来越多的AI工具被融入到各行各业&#xff0c;开辟了新天地&#xff0c;带来了创新的盈利模式。 其中&#xff0c…

回收站删除的照片怎么恢复?7个实用方法为你找回照片!

“我刚刚在对电脑上的照片进行清理&#xff0c;不小心错删了一张还需要的照片&#xff0c;但是在使用回收站时&#xff0c;将它删除了&#xff0c;有什么恢复回收站照片的简单方法吗&#xff1f;” 照片是我们生活点滴的见证&#xff0c;无论是外出旅游还是日常琐碎&#xff0c…

对话YashanDB CTO陈志标:如何推动国产数据库长远发展

深圳计算科学研究院&#xff08;以下简称“深算院”&#xff09;是深圳市人民政府2018年11月批准建设的“十大基础研究机构”之一&#xff0c;由深圳市科技创新委员会主管、深圳大学举办、深圳市龙华区人民政府共建的二类事业法人单位。 崖山数据库系统YashanDB是深算院完全自主…

Originx的创新解法之:应用程序故障篇

Originx并不期望做一个完整覆盖全栈的监控体系&#xff0c;而是利用北极星指标体系标准化找出故障方向&#xff0c;然后联动各种成熟的监控数据形成证据链条&#xff0c;并将各种数据融合在一个故障报告之中。更多信息请参考 Log | Metrics | Trace的联动方式探讨http://mp.wei…

iPhone携手ChatGPT?苹果OpenAI或将强强联手

近年来&#xff0c;人工智能技术的蓬勃发展掀起了一场席卷全球的科技浪潮&#xff0c;而智能手机作为人们日常生活中不可或缺的一部分&#xff0c;自然成为了这场AI竞赛的重要战场。各大科技巨头纷纷加码布局&#xff0c;力图在AI领域占据领先地位。 近日&#xff0c;据知情人士…

智慧城市新篇章:城市街道治理视频系统建设的探索与实践

一、背景分析 随着城市化进程的加快和社会治安形势的日趋复杂&#xff0c;街道治安管理面临着前所未有的挑战。对于街道治安的管理&#xff0c;面临着街道上机动车、非机动车违停、游商摊贩、垃圾堆积、人员监管等问题&#xff0c;既影响市容市貌&#xff0c;又有安全隐患。传…

Springboot+Shiro实现登录

Shiro的简单介绍 Shiro是Java的一个安全框架&#xff0c;旨在简化身份验证和授权。Shiro在JavaSE和JavaEE项目中都可以使用。它主要用来处理身份认证&#xff0c;授权&#xff0c;企业会话管理和加密等。 shiro由三部分组成&#xff1a; 1、Subject&#xff1a;当前操作的用…

自定义类似vite的命令行

一、第一步 随便新建一个文件夹&#xff0c;终端执行npm init&#xff0c;生成如图的结构 其中name就是命令行的名字 二、第二步 新建一个js文件&#xff0c;在其顶部加入这串代码#!/usr/bin/env node,#!就是告诉系统这个是可执行脚本,/usr/bin/env就是系统环境变量&#x…