首页 > 编程语言 >考研算法辅导课笔记:第十五讲--字符串处理,递归和背包

考研算法辅导课笔记:第十五讲--字符串处理,递归和背包

时间:2023-02-24 10:58:53浏览次数:45  
标签:状态 背包 辅导课 -- 问题 物品 字符串 题目 考研

比较轻松的一节课

  • 字符串处理。不需要用到算法,只是考察对于字符串处理的API是否熟悉。
  • 递归。 经典的问题,把每一个问题划归成若干相同的子问题。
  • 背包问题。典型的dp问题,经常考的模型。

杂谈:计算机考研专业课的内容怎么样?很多八股文,很多都是用不到的。不能把知识转化成产品。

题目一

首字母大写
题目大意 :读入一堆字符串,将单词首字母大写。
问题分析

  • 很明显的一个问题就是如何读入带空格字符串呢。getline(cin,s)
  • 第二个问题,如何判断单词。
  • 第三个问题,那么该怎么变成大写呢?使用 toupper 函数。
    把这三个问题解决了,是不是答案就很明显了。

题目二

日志排序
题目大意:输入字符串,代表日志信息,按照一定的规则解析字符串并且排序。
问题分析

  • 主要问题是什么?主要是分析字符串,进行排序。
  • 遇到什么问题? 该如何拆解字符串呢?

题目三

字符串转化整数
题目大意:输入字符串。输出的字符串的第一个整数
问题分析

  • 该如何判断数字呢? isdigit()。
  • 该如何判断是否在范围里面呢? 使用头文件#include <limits.h> INT_MAX 表示最大int整数。

题目四

重复者
题目大意:给定一个模板,根据输入,扩写后面的图形
问题分析:使用递归,分解成子问题。

  • 使用getline 有什么需要注意的吗?记得将上面一行的回车使用 getchar消掉。

  • 背包问题

问题五

01背包问题

  • 上机题目是不是很快乐?现在开始讲解背包问题了。
  • 上机题一般如何考察呢?一般都是考察经典的模型。然后考察你对这个模型的理解,对这个模型的转化。
  • 这个题目怎么做呢?是不是可以用到闫氏dp分析呢?进行划分集合,设置状态。
  • dp要怎么考虑呢? 首先是状态表示 f(i, j), 然后是状态计算。
  • 那个怎么状态标识呢? 一般来说都是通过经验定义的,很难自己凭空想象。
  • 那么状态表示该从哪几个方面来看呢? 首先看状态表示的集合,然后看状态表示的属性。
  • 这里面集合表示什么? 集合表示所有的选择方法。
  • 这里面集合表示什么呢? 所有从前i个物品中选择,且体积不超过j的选法方案数。
  • 这里面属性表达什么 ? 所有的选法中最大的价值。
  • 怎么进行状态的计算呢? 这个一般对应集合的划分。 划分的时候,找不同点。
  • 那么如何找不同点呢? 一般是最后一个。所以一起来看一看第i个物品的选法。
  • 第i个物品,选或者不选,是不是可以分成两类呢?

所以说是不是明白了如何求 f(i, j) 最大值? ans = max (取第i个物品, 不取第i 个物品)
如果要求数量怎么办 ? 那么就是 ans = 取第i个物品 + 不取第i 个物品

\[f(i,j) = max(f(i-1,j), f(i-1,j-v_i) + w_i) \]

经过分析之后,是不是怎么做很明显了。
但是到这里结束了吗?没有,一般来说,背包问题还涉及到空间优化。
怎么优化空间呢? 把不优化的代码写出来,然后做等价变形就可以了。

问题六

点菜问题
题目分析:是不是在考察背包问题的运用呢?
算法考试的本质是什么?考察模型转化的问题。

问题七

背包问题
题目分析:该如何转化成背包问题
/*
状态定义:f[i][j] 表示前i个物品总重量恰好等于j的方案数
集合划分:根据第i个物品,选或不选将集合化成两部分
状态计算:f[i][j] = f[i-1][j] + f[i-1][j-w[i]]
*/
三步走

问题八

整数拆分
思路:做算法题很典型的想法,把问题转化成已知问题。这个就是转化成背包问题。
需要考虑组合问题。
完全背包的状态转移方程,求方案数

\[f(i,j) = f(i-1, j) + f(i, j-v) \]

复习反序输出 AcWing 3379
怎么使用 reverse 函数呢? reverse(s.begin(), s.end());

标签:状态,背包,辅导课,--,问题,物品,字符串,题目,考研
From: https://www.cnblogs.com/spock12138/p/17136192.html

相关文章

  • windows将前端项目部署到nginx
    1、在官网下载安装Nginx(记得安装稳定版本)2、执行Nginx.exe(通过查看任务管理器,确定任务是否执行)listen默认为80端口,若Nginx.exe无法启动(查看任务管理器找不到nginx),则有......
  • Java面试
    为什么重写equals还要重写hashCode方法1、如果equals和hashCode方法的实现不一致,在集合中使用时可能会报错,比如找不到对象、重复存储对象2、比如Set集合存储的......
  • Day01-Markdown学习
    Markdown学习要看具体格式可在安装Typora中在点击“启动源代码模式”标题:一级标题:#+空格+标题,二级标题:##+空格+标题,三级四级标题同理 字体Hello,World!(字体两边......
  • 深拷贝
    functiondeepClone(source){vartargetObj=Array.isArray(source)===Array?[]:{};for(varkeysinsource){i......
  • 选择最佳机器学习模型的10步指南
    机器学习可以用来解决广泛的问题。但是有很多多不同的模型可以选择,要知道哪一个适合是一个非常麻烦的事情。本文的总结将帮助你选择最适合需求的机器学习模型。完整文章:......
  • 873~874 redis概述,下载安装
    Redis:1、概述:redis是一款高性能的NOSQL系列的非关系型数据库;1-1:什么是NOSQLNoSQL(NoSQL=NotOnlySQL),意即“不仅仅是SQL”,是一项全新的数据......
  • 关于Linux下nfs文件系统挂载时间的查询
    OS环境:RedHatEnterpriseLinuxrelease8.1(Ootpa)服务端内核版本:4.18.0-147.el8.x86_64服务端NFS版本:nfs-utils-2.3.3-57.el8_7.1.x86_64 最近在检查一台服务器......
  • Luban小试牛刀.md
    Luban小试牛刀LubanUnityLubanUnity配置工具配置解决方案简介Github文档视频教程Unity工具个人感觉挺强大,便捷的,适合中大型游戏项目的配置工作。小项目scriptobjec......
  • 小程序Excel导入导出数据库功能
    https://blog.csdn.net/yhcad/article/details/116204444unitUmain;interfaceuses Winapi.Windows,Winapi.Messages,System.SysUtils,System.Variants, System.Cl......
  • windows下仅允许一个程序联网,并禁止其他所有程序联网
    打开防火墙和网络防护,可见使用的公用网络,以公用网络为例点击高级设置,点击windowsdefender防火墙属性出站连接选择阻止点击出站程序,新建规则,选择程序。下一步,选择......