算法题
文章平均质量分 94
针对题库里常见函数的分享
爱吃奶糖_
--
展开
-
动态规划之背包九讲之一 — 01背包
在讲解之前我们先来看一道题目。如下:一个小偷有一个最大容纳M千克的背包,现在商店里有N件物品,每件物品的的重量分别是w1,w2,…wn。每件物品的价值为v1,v2,…,vn。求小偷能偷走的最大价值。(其中M<=200,n<=30)。第一行输入M,n。第二行到第n+1行,每行输入一个重量和一个价值,代表第i件物品的信息。这道题就是典型的背包问题,分析可知在不把背包装爆的情况下,选择...原创 2020-03-16 11:18:32 · 1623 阅读 · 0 评论 -
算法系列--滑动窗口与双指针
简述个人理解滑动窗口与双指针:双指针:以r为基础指针并根据题目要求来移动l或者保持l不动,同时ans由每一步的r-l来更新。滑动窗口:以l为基础指针,并且l~r看做一个窗口,r不断右移,根据题目要求来右移一次l或者保持l不动,特点是r-l始终不减,ans为最终的r-l区别:双指针算法当需要移动l指针时,可能移动多个单位以满足要求。而滑动窗口算法当需要移动l指针时,每次必定只移动一个单位!算法选择:求最短长度类似题目:双指针求最长长度类似题目:双指针 or 滑动窗口题目一LC 1004原创 2021-02-09 22:56:26 · 3256 阅读 · 0 评论 -
回文系列总结
回文系列题目,大致分为两种,一种是整数类型回文,一种是字符串类型回文。第二种较为常见。1> 整数类型回文题目Leetcode 9:判断一个整数是否是回文数。方法1:整数转化为字符串,判断是否相等 bool isPalindrome(int x) { string s = to_string(x); int i = 0, j = s.size() - 1; while(i < j) {原创 2020-06-02 09:46:20 · 527 阅读 · 0 评论 -
动态规划之背包九讲之八 — 背包问题求具体方案
题目:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 字典序最小的方案。这里的字典序是指:所选物品的编号所构成的序列。物品的编号范围是 1…N。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,w...原创 2020-05-03 23:34:13 · 352 阅读 · 0 评论 -
动态规划之背包九讲之七 — 背包问题求方案数
题目:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 最优选法的方案数。注意答案可能很大,请输出答案模 109+7 的结果。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表...原创 2020-05-03 23:30:09 · 486 阅读 · 0 评论 -
动态规划之背包九讲之六 — 分组背包
题目:有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,表示第 i 个物...原创 2020-05-03 23:26:05 · 264 阅读 · 0 评论 -
动态规划之背包九讲之五 — 二维费用背包
题目:有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。接下来有 N 行,每行三个整数 vi,mi...原创 2020-05-03 23:18:06 · 183 阅读 · 0 评论 -
动态规划之背包九讲之三 — 多重背包
题目:有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数...原创 2020-05-03 23:08:24 · 304 阅读 · 0 评论 -
C++ 位运算
1. & (按位与).x: 100011010100-x: 011100101100 (计算机中-x = 将x每一位取反+1)&: 000000000100结论: x & -x = x的二进制表示里左右边的一个1应用:求x是否为2的整数次幂int isPow(int n){ return n > 0 && (n & (n ...原创 2020-04-05 10:22:20 · 236 阅读 · 0 评论 -
动态规划之背包九讲之二 — 完全背包
在讲解之前我们先来看一下题目。如下:一个小偷有一个最大容纳M千克的背包,现在商店里有N件物品,每种物品的个数是无限的,每件物品的的重量分别是w1,w2,…wn,每件物品的价值为v1,v2,…,vn。求小偷能偷走的最大价值。(其中M<=200,n<=30)。第一行输入M,n。第二行到第n+1行,每行输入一个重量和一个价值,代表第i件物品的信息。承接01背包问题,本题在01背包基础上...原创 2020-03-29 19:12:52 · 160 阅读 · 0 评论 -
大整数的四则运算----减法
题目:输入两个正整数num1,num2。(0<num<10^1000),计算这两个数的差。在前面的大整数的加法里已经分析过(大整数的四则运算----加法),所以话不多说,直接上重点。还是对应位之间的运算,但是减法不同于加法,加法具有交换律,所以两个数哪个在前哪个在后都无所谓。但减法却不行,所以为了计算,我们首先要知道num1,num2到底哪个大?所以需要一个比较函数,如下。Code...原创 2020-03-10 08:45:18 · 294 阅读 · 0 评论 -
大整数的四则运算----加法
题目:输入两个正整数num1,num2。(0<num<10^1000),计算这两个数的和。相信大家在刷OJ等题目时已经见过这类题型,可能第一眼看,这题如此简单,计算两个数的加法简直是小case。于是三下五除二写完代码…copy…paste…结果错误…于是你又回头仔细读了一遍题,发现的重点。没错,重点就是 (0<num<10^1000)。我们知道int类型的范围是 -2...原创 2020-03-09 12:30:07 · 295 阅读 · 0 评论