第四十六天 | 279.完全平方数 139.单词拆分

2024-05-29 02:20

本文主要是介绍第四十六天 | 279.完全平方数 139.单词拆分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:279.完全平方数

本题比较简单,几天没做背包但是这道题很快ac了

尝试解答:

        题目类型:给定一个背包容量,求装满背包的最少物品数,且每个物品可以放多次,完全背包

        1.dp[j]数组含义:装满容量为 j 的背包所需要的物品数为dp[j] 

        2.状态转移方程:dp[j] = min(dp[j], dp[j - i * i] + 1)

        3.初始化:dp[0] =  0(这个是通过测试集试出来的),0之外的位置初始化为最大值,防止将答案覆盖

        4.遍历顺序:必须先遍历背包,在物品的终止条件中会用到背包容量作为限制。如果先遍历物品,那不知道for在哪里终止。
        5.打印dp

class Solution {
public:int numSquares(int n) {vector<int> dp(n + 1, INT_MAX);      //0之外的位置初始化为最大值,防止将答案覆盖dp[0] = 0;for(int j = 0; j <= n; j++){     //先背包后物品for(int i = 1; i <= n && i * i <= j; i++){     //for循环的判断条件里要多一条平方数小于背包容量,防止访问越界dp[j] = min(dp[j], dp[j - i * i] + 1);    //统计方法数}}return dp[n];}
};

其实先遍历物品后遍历背包也可以,只不过要加上一个防止访问越界的判断条件if

题目:139.单词拆分

尝试:失败

这道题相当于是判断给定容量的背包能不能装满。背包总容量s.size()

这个背包的总容量为s.size(),如果到最后背包内所装物品的数量为s.size(),就返回true,否则返回false.

1.dp[j]含义:容量为j的背包所装物品的数目

2.动态转移方程:如果字典里有[i],dp[j] = dp[j - ] + 1;

3.初始化:dp[0] = 

4.遍历顺序:先后顺序没有影响,背包的顺序从小到大

正解:

本题应该是求排列数类型

1.dp数组含义:字符串的长度为 i,能否能装满

2.递推公式:截取[i , j]这一段的s,判断这个子串是否存在于字典中,先将数组字典转化为set,set中查询的函数为find()。if([i,j] && dp[i] == true) 则 dp[j] == true; else dp[j] == false

3.初始化:dp[0] = true,非零下标都为false

4.遍历顺序:求排列数,先遍历背包再物品

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.begin(), wordDict.end());vector<bool> dp(s.size() + 1, false);dp[0] = true;for(int j = 0; j <= s.size(); j++){      //先背包for(int i = 0; i <= j; i++){string word = s.substr(i, j - i);     //将s进行剪切赋值给str//substr(起始位置,截取的个数)if(wordSet.find(word) != wordSet.end() && dp[i] == true){dp[j] = true;}}}return dp[s.size()];}
};

[易错]:if的判断条件里应该是dp[i] == true,因为要判断的是i之前的字符串是否查询成功了,不要惯性思维写dp[j - i] == true。

[注意]:各种语法:比如转字典、字典查询、切割字符串等

这篇关于第四十六天 | 279.完全平方数 139.单词拆分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012368

相关文章

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

JavaScript中的Map用法完全指南

《JavaScript中的Map用法完全指南》:本文主要介绍JavaScript中Map用法的相关资料,通过实例讲解了Map的创建、常用方法和迭代方式,还探讨了Map与对象的区别,并通过一个例子展... 目录引言1. 创建 Map2. Map 和对象的对比3. Map 的常用方法3.1 set(key, v

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

HDU 2159 二维完全背包

FATE 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能

zoj 1721 判断2条线段(完全)相交

给出起点,终点,与一些障碍线段。 求起点到终点的最短路。 枚举2点的距离,然后最短路。 2点可达条件:没有线段与这2点所构成的线段(完全)相交。 const double eps = 1e-8 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1(错误经验) #include <iostream>#include <string>using namespace std;int main() {string s;string ret;int count = 0;while(cin >> s)for(auto a : s){if(count == 0){if( a <=

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt