动态规划
菜鸡的博客
这个作者很懒,什么都没留下…
展开
-
hdu 2069 Coin Change
Problem DescriptionSuppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We want to make changes with these coins for a given amount of money.For example, if we have 11 cents, then we can make changes with one 10-cent coin an原创 2021-05-24 15:07:18 · 149 阅读 · 0 评论 -
蓝桥杯 砝码称重
你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WN。请你计算一共可以称出多少种不同的正整数重量?注意砝码可以放在天平两边。输入格式输入的第一行包含一个整数 N。第二行包含 N 个整数:W1,W2,W3,⋅⋅⋅,WN。输出格式输出一个整数代表答案。数据范围对于 50% 的评测用例,1≤N≤15。对于所有评测用例,1≤N≤100,N 个砝码总重不超过 105。输入样例:31 4 6输出样例:10样例解释能称出的 10 种重量是:1、2、3、4、5、6原创 2021-05-17 19:52:51 · 615 阅读 · 0 评论 -
272. 最长公共上升子序列
熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们研究最长公共上升子序列了。小沐沐说,对于两个数列 A 和 B,如果它们都包含一段位置不一定连续的数,且数值是严格递增的,那么称这一段数是两个数列的公共上升子序列,而所有的公共上升子序列中最长的就是最长公共上升子序列了。奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升子序列。不过,只要告诉奶牛它的长度就可以了。数列 A 和 B 的长度均不超过 3000。输入格式第一行包原创 2021-05-11 20:15:33 · 187 阅读 · 0 评论 -
AcWing 271. 杨老师的照相排列
有 N 个学生合影,站成左端对齐的 k 排,每排分别有 N1,N2,…,Nk 个人。 (N1≥N2≥…≥Nk)第 1 排站在最后边,第 k 排站在最前边。学生的身高互不相同,把他们从高到底依次标记为 1,2,…,N。在合影时要求每一排从左到右身高递减,每一列从后到前身高也递减。问一共有多少种安排合影位置的方案?下面的一排三角矩阵给出了当 N=6,k=3,N1=3,N2=2,N3=1 时的全部 16 种合影方案。注意身高最高的是 1,最低的是 6。123 123 124 124 125 125 1原创 2021-05-10 20:54:11 · 84 阅读 · 0 评论 -
CD 45 龙与地下城游戏问题
正整数n,m \left ( 1\leq n,m\leq 10^{3} \right )(1≤n,m≤103),接下来n行,每行m个整数,代表map_{ij} \left( -10^3 \leq map_{ij} \leq 10^{3}\right )mapij (−103≤mapij ≤103)。输出描述:输出一个整数,表示答案。示例1输入复制3 3-2 -3 3-5 -10 10 30 -5输出复制7示例2输入复制2 21 11 1输出原创 2021-04-11 20:35:05 · 109 阅读 · 0 评论 -
CD 33 最长公共子串
题目描述给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1。输入描述:输入包括两行,第一行代表字符串srr1,第二行代表字符串str2。\left( 1\leq length(str1),length(str2) \leq 5000 \right)(1≤length(str1),length(str2)≤5000)输出描述:输出包括一行,代表最长公共子串。示例1输入复制1AB2345CD12345EF输出复制2345备注:思路:见书2原创 2021-04-10 09:53:02 · 54 阅读 · 0 评论 -
CD 25 最长递增子序列
题目描述给定数组arr,设长度为n,输出arr的最长递增子序列。(如果有多个答案,请输出其中字典序最小的)输入描述:输出两行,第一行包括一个正整数n(n<=100000),代表数组长度。第二行包括n个整数,代表数组arr \left(1 \leq arr_i \leq 1e9 \right)(1≤arri ≤1e9)。输出描述:输出一行。代表你求出的最长的递增子序列。示例1输入复制92 1 5 3 6 4 8 9 7输出复制1 3 4 8 9示例2输入复制5原创 2021-04-09 20:58:40 · 80 阅读 · 0 评论 -
CD 41 边界都是1的最大正方形大小
题目描述给定一个N \times NN×N的矩阵matrix,在这个矩阵中,只有0和1两种值,返回边框全是1的最大正方形的边长长度、例如0 1 1 1 10 1 0 0 10 1 0 0 10 1 1 1 10 1 0 1 1其中,边框全是1的最大正方形的大小为4 \times 44×4,所以返回4[要求]时间复杂度为O(n^3)O(n3),空间复杂度为O(n^2)O(n2)输入描述:第一行一个整数N。表示矩阵的长宽。接下来N行,每行N个整数表示矩阵内的元素输出描述:输原创 2021-04-08 21:05:01 · 148 阅读 · 0 评论 -
CD 135 回文最少分割数
题目描述给定一个字符串,返回把str全部切割成回文串的最少切割数。输入描述:输出包含一行字符串,代表str(1 \leq length_{str} \leq 5000)(1≤lengthstr ≤5000)。输出描述:输出一个整数,代表把str全部切割成回文串的最小切割数。示例1输入复制ABA输出复制0说明本身是回文串,不需要切割,直接输出0示例2输入复制ABCBAEEE输出复制1说明切割1次,变为“ABCBA”和“EEE”时间复杂度O(nn)空间 O原创 2021-04-02 21:11:59 · 118 阅读 · 0 评论 -
CD 70 累加出整个范围所有的数最少还需要几个数
题目描述给定一个正数数组\ arr arr 和一个正数\ range range,可以选择\ arr arr 中的任意个数字加起来的和为\ sum sum。返回最小需要往\ arr arr 中添加几个数,使得\ sum sum 可以取到1 \sim range1∼range范围上的每一个数。给出的数组不保证有序!输入描述:第一行一个整数N, K。表示数组长度以及range接下来一行N个整数表示数组内的元素输出描述:输出一个整数表示答案示例1输入复制4 151 2 3 7输出复制原创 2021-03-20 20:14:01 · 87 阅读 · 0 评论 -
CD 93数组中最长的连续子序列
题目描述给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)输入描述:输出两行,第一行包括一个整数n( 1 \leq n \leq10^5 )(1≤n≤105),第二行包含n个整数,分别代表arr[i](1 \leq arr[i] \leq 10^8 )(1≤arr[i]≤108)输出描述:输出一个整数,代表最长连续子序列的长度。示例1输入复制6100 4 200 1 3 2输出复制4示例2输入复制3原创 2021-03-17 10:53:07 · 66 阅读 · 0 评论 -
CD 32 数组中子数组的最大累乘积
题目描述给定一个double类型的数组arr,其中的元素可正、可负、可0,返回子数组累乘的最大乘积。例如,arr=[-2.5, 4, 0, 3, 0.5, 8, -1],子数组[3, 0.5, 8]累乘可以获得最大的乘积12,所以返回12[要求]时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)输入描述:第一行一个整数N。表示数组长度。接下来一行N个浮点数表示数组内的数输出描述:输出一个浮点数表示答案,保留到小数点后两位示例1输入复制7-2.5 4 0 3 0.5 8 -1原创 2021-03-16 11:24:22 · 80 阅读 · 0 评论 -
CD 31 最长公共子序列
题目描述给定两个字符串str1和str2,输出连个字符串的最长公共子序列。如过最长公共子序列为空,则输出-1。输入描述:输出包括两行,第一行代表字符串str1,第二行代表str2。\left( 1\leq length(str1),length(str2) \leq 5000\right)(1≤length(str1),length(str2)≤5000)输出描述:输出一行,代表他们最长公共子序列。如果公共子序列的长度为空,则输出-1。示例1输入复制1A2C3D4B56B1D23CA45原创 2021-02-21 17:34:39 · 96 阅读 · 0 评论 -
CD 27 子矩阵的最大累加和问题
题目描述给定一个矩阵matrix,其中的值有正、有负、有0,返回子矩阵的最大累加和例如,矩阵matrix为:-90 48 7864 -40 64-81 - 7 66其中,最大的累加和的子矩阵为:48 78-40 64-7 66所以返回累加和209。例如,matrix为:-1 -1 -1-1 2 2-1 -1 -1其中,最大累加和的子矩阵为:2 2所以返回4[要求]时间复杂度为O(n^2m)O(n2m),空间复杂度为O(nm)O(nm)输入描述:第一行有两个整数N原创 2021-02-21 16:07:22 · 125 阅读 · 0 评论 -
CD 26 子数组的最大累加和问题
题目描述给定一个数组arr,返回子数组的最大累加和例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.[要求]时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)输入描述:第一行一个整数N。表示数组长度接下来一行N个整数表示数组内的元素输出描述:输出一个整数表示答案示例1输入71 -2 3 5 -2 6 -1输出12书上的解法:#include<iostream>原创 2021-02-21 11:40:07 · 91 阅读 · 0 评论 -
CD 20 打气球的最大分数
题目描述给定一个数组arr,长度为n。代表排有分数的气球。 每打爆一个气球都能获得分数,假设打爆气球的分数为X,获得分数的规则如下:1)如果被打爆气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为L:如果被打爆气球的右边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为R.获得分数为LXR2)如果被打爆的气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为L:如果被打爆气球的右边所有气球都已经被打爆,获得分数为LX。3)如果被打爆气球的左边所有的气球都已经被打爆:原创 2021-02-17 15:31:34 · 146 阅读 · 0 评论 -
CD 17 机器人到达指定位置方案数
题目描述假设有排成一行的N个位置,记为1~N,开始时机器人在M位置,机器人可以往左或者往右走,如果机器人在1位置,那么下一步机器人只能走到2位置,如果机器人在N位置,那么下一步机器人只能走到N-1位置。规定机器人只能走k步,最终能来到P位置的方法有多少种。由于方案数可能比较大,所以答案需要对1e9+7取模。输入描述:输出包括一行四个正整数N(2<=N<=5000)、M(1<=M<=N)、K(1<=K<=5000)、P(1<=P<=N)。输出描述:输出原创 2021-02-05 22:50:05 · 147 阅读 · 0 评论 -
CD 12 换钱的最少货币数
题目描述给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。输入描述:输入包括两行,第一行两个整数n(0<=n<=1000)代表数组长度和aim(0<=aim<=5000),第二行n个不重复的正整数,代表arr\left( 1 \leq arr_i \leq 10^9 \right)(1≤arri ≤109)。输出描述:输出一个整数,表示组成aim原创 2021-02-05 20:47:39 · 64 阅读 · 0 评论 -
CD 186 矩阵的最小路径和
题目描述给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。输入描述:第一行输入两个整数 n 和 m,表示矩阵的大小。接下来 n 行每行 m 个整数表示矩阵。输出描述:输出一个整数表示答案。示例1输入复制4 41 3 5 98 1 3 45 0 6 18 8 4 0输出复制12备注:1≤n,m≤20000≤ Aij ≤100 #include<stdio原创 2021-02-05 20:26:22 · 205 阅读 · 0 评论 -
试题 算法提高 合并石子
试题 算法提高 合并石子资源限制时间限制:2.0s 内存限制:256.0MB问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数。求把所有石子合并成一堆的最小花费。输入格式 输入第一行包含一个整数n,表示石子的堆数。 接下来一行,包含n个整数,按顺序给出每堆石子的大小 。输出格式 输出一个整数,表示合并的最小花费。样例输入51 2 3 4 5样例输出33数据规模和约定 1<=原创 2020-10-08 15:19:07 · 408 阅读 · 0 评论 -
试题 算法提高 求最大值
试题 算法提高 求最大值问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大。并且要求你选定的数对的ai之和非负,bi之和非负。输入格式 输入的第一行为n,数对的个数 以下n行每行两个整数 ai bi输出格式 输出你选定的数对的ai+bi之和样例输入5-403 -625-847 901-624 -708-293 413886 709样例输出1715数据规模和约定 1<=n<=100 -1000<原创 2020-10-04 16:24:44 · 637 阅读 · 0 评论 -
acwing 3. 完全背包问题
完全背包问题有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4原创 2020-10-04 09:23:58 · 140 阅读 · 0 评论 -
ACWING 01背包
01背包原题链接有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例原创 2020-10-03 20:55:40 · 94 阅读 · 0 评论 -
试题 算法提高 概率计算
问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率。输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔。输出格式 输出一行包含一个小数位和为x的概率,小数点后保留四位小数样例输入2 1 3 4样例输出0.3333数据规模和约定 对于50%的数据,n≤5. 对于100%的数据,n≤100,b≤100.动态规划:状态转移方程:dp[ i ][ j ]+=dp[ i-1][j-z];(a<=z<=b)思路见代码 #include<std原创 2020-10-03 19:04:36 · 318 阅读 · 0 评论 -
试题 算法提高 天天向上
问题描述 A同学的学习成绩十分不稳定,于是老师对他说:“只要你连续4天成绩有进步,那我就奖励给你一朵小红花。”可是这对于A同学太困难了。于是,老师对他放宽了要求:“只要你有4天成绩是递增的,我就奖励你一朵小红花。”即只要对于第i、j、k、l四天,满足i<j<k<l并且对于成绩wi<wj<wk<wl,那么就可以得到一朵小红花的奖励。现让你求出,A同学可以得到多少朵小红花。输入格式 第一行一个整数n,表示总共有n天。第二行n个数,表示每天的成绩wi。输出格式原创 2020-09-22 09:19:46 · 951 阅读 · 0 评论 -
leetcode 357. 计算各个位数不同的数字个数
给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n 。示例:输入: 2输出: 91解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。思路:n1,dp[1]=10;n2, 第一位不能位0,所以需要处理一下,把dp[1]=9;状态转移方程:dp[i]=dp[i-1]*(10-i+1) (i>=2)class Solution {public: int countN原创 2020-09-21 20:23:13 · 158 阅读 · 0 评论 -
leetcode 343整数拆分
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。思路:贪心法,因为当n=2,3,4时他们最大值为1,2,4;当n>4时,最好的办法是分成多个3,证明看官方给的解释(我太菜了看不懂)class原创 2020-09-21 15:05:33 · 83 阅读 · 0 评论 -
leetcode 978. 最长湍流子数组
当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。返回 A 的最大湍流子数原创 2020-09-21 14:31:56 · 210 阅读 · 0 评论 -
leetcode 474. 一和零
在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。注意:给定 0 和 1 的数量都不会超过 100。给定字符串数组的长度不会超过 600。示例 1:输入: Array = {“10”, “0001”, “111001”, “1”, “0”}, m = 5, n =原创 2020-09-21 10:33:43 · 195 阅读 · 0 评论 -
leetcode 300. 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?思路:设一个dp[ ]数组,dp[i]表示以arr[ i ]结尾的最长上升子序列的长度,时间复杂度O(N*N)class Solut原创 2020-09-18 20:22:24 · 79 阅读 · 0 评论 -
摔鸡蛋,摔手机问题。
动态规划:鸡蛋问题(100层2个鸡蛋,问最少需要测试多少次,在最坏的运气下,采取最佳策略。类型题目,蓝桥杯2018年省赛b组第4题)思路:/* 对于每个楼层i,可以从[1,i-1]层中任选一层抛j第一个鸡蛋:鸡蛋可能破了,那么必须挨个尝试[1,j-1],即dp[1][j-1],鸡蛋可能没破,那么处理[j+1,i],即dp[2][i-j]。每次抛都考虑最坏情况,即max(dp[1][j-1],dp[2][i-j])。枚举所有[1,i-1]的楼层,取最优解 */大佬代码:#include <io原创 2020-09-10 20:54:20 · 221 阅读 · 0 评论