
动态规划
一粒大榴莲
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
力扣 统计全 1 子矩形(前缀和+动态规划)
给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 。示例 1:输入:mat =[[1,0,1],[1,1,0],[1,1,0]]输出:13解释:有 6 个 1x1 的矩形。有 2 个 1x2 的矩形。有 3 个 2x1 的矩形。有 1 个 2x2 的矩形。有 1 个 3x1 的矩形。矩形数目总共 = 6 + 2 + 3 + 1 + 1 = 13 。示例 2:输入:mat =[[0,1,1,0],[0,转载 2020-07-05 17:59:06 · 271 阅读 · 0 评论 -
力扣 最长有效括号(三种解法)(动态规划+栈)
动态规划:class Solution {public: int longestValidParentheses(string s) { int maxans = 0, n = s.length(); vector<int> dp(n, 0); for (int i = 1; i < n; i++) { if (s[i] == ')') { if (s[i - 1] == .原创 2020-07-04 10:37:59 · 350 阅读 · 0 评论 -
力扣 最长重复子数组和最长公共子序列(动态规划)
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释:长度最长的公共子数组是 [3, 2, 1]。最长重复子数组是需要连续的,递推公式为dp[i][j] = dp[i-1][j-1] + 1;最长公共子序列是不需要连续的,递推公式为 dp[i][j] = max(dp[i-1][j-1]+(text2[i - 1] == text1[j - 1]?1:0),dp[i-1][j],d原创 2020-07-01 10:06:58 · 650 阅读 · 0 评论 -
力扣 1014.简单观光组合
思路:用maxn表示对于A【i】来说,之前的一个最大观光分值,res表示A【0】到A【i】的一对最大观光分值class Solution {public: int maxScoreSightseeingPair(vector<int>& A) { int res = 0; int maxn = A[0]; for(int i = 1;i < A.size();i++){ //因为距离,需要减一 .原创 2020-06-17 11:04:01 · 158 阅读 · 0 评论 -
力扣 动态规划 使用最小花费爬楼梯
class Solution {public: int minCostClimbingStairs(vector<int>& cost) { cost.push_back(0); int p1=cost[1],p2=cost[0]; for(int i=2;i<cost.size();i++){ int tmp=p1; p1=min(p1,p2)+cost[i]; ..原创 2020-06-13 15:51:03 · 222 阅读 · 0 评论 -
蓝桥杯 历届试题 对局匹配 dp动态规划(思路详见代码注释)
问题描述 小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。 现在小明知道这个网站总共有N名用户,以及他们的积分分别是A1, A2, … AN。 小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场...原创 2020-04-12 22:41:17 · 319 阅读 · 0 评论 -
第九届蓝桥杯省赛 测试次数 动态规划
标题:测试次数x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。如果手机从第7层扔下去没摔坏,但第8层摔...原创 2020-03-24 00:06:59 · 223 阅读 · 0 评论 -
Leetcode 63. 不同路径 II 动态规划 (双百分之百代码)
class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { //有测试用例是刚开始就是障碍。。。。狗的很 if(obstacleGrid[0][0] == 1) return 0; int r...原创 2020-03-18 18:59:25 · 174 阅读 · 0 评论 -
蓝桥杯试题 第八届省赛第八题 包子凑数
#include<iostream>#include<cstring>#include<algorithm>#include<vector>using namespace std;int n,g,sum,num[105];int dp[100010];int gcd(int a,int b){//求最大公约数 if(b ==...原创 2020-03-16 18:16:03 · 155 阅读 · 0 评论 -
神奇的口袋 动态规划 背包问题 dp
#include<stdio.h>int dp[205],sum[405];int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf(" %d",&dp[i]); sum[0]=1; for(int i=0;i<n;i++) ...原创 2020-02-28 11:15:39 · 284 阅读 · 0 评论 -
铺砖 动态规划 DP
解题思路:首先我们定义dp[i]为i列时候铺砖的方法数,我们考虑2 * 2的时候,一共有3个方法,考虑3 * 2的时候,多出了一列,如果我们竖着直接放一个,方法数就和2 * 2时候一样,即3,也就是dp[i-1]个方法数,如果我们对3的后两列进行铺砖,我们只能横着放两个和竖着放一大个,为什么不能竖着放2个呢,因为这时候的方法数其实就和前面重叠了,所以只能加上2 * dp[i-2]。所以得出:...原创 2020-02-26 00:50:10 · 1292 阅读 · 0 评论 -
放苹果 动态规划 dp
**解题思路:**首先用dp[j][i]来表示有j个苹果放在i个盘子里。j<i:意思就是盘子多了,例如2个苹果放在7个盘子里,和2个苹果放在2个盘子里方法数是一样的(本题是这样滴。。。)。所以:dp[j][i]=dp[j][j];j==i:例如3个苹果放3个盘子里,等于3个苹果放3个盘子的方法数(就是1),加上3个苹果放2个盘子的方法数。所以:dp[j][i]=1+dp[j][i...原创 2020-02-25 00:19:24 · 660 阅读 · 0 评论 -
爬楼梯(1) 动态规划 DP 入门练习题
思路:到达某一层的方法数等于到达上一层的方法数加上到达上上层的方法数.即:dp[i]=(dp[i-1]+dp[i-2])#include<stdio.h>int dp[1010];int main(){ dp[1]=1; dp[2]=2; int n; scanf("%d",&n); for(int i=3;i<=n;i++){ dp[i]...原创 2020-02-22 20:25:57 · 268 阅读 · 0 评论 -
爬楼梯(2)动态规划入门 dp
思路:为了到达某x层楼梯,总方法数等于到达x-1层楼梯的方法数+到达x-3层楼梯的方法数+到达x-5层楼梯的方法数…#include<stdio.h>int dp[1010];int main(){ int n; scanf("%d",&n); dp[0]=1; for(int i=1;i<=n;i++){ for(int j=i-1;j>...原创 2020-02-22 21:08:36 · 241 阅读 · 0 评论 -
大盗阿福 动态规划入门 dp
阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有 NN 家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?输入格式输入的第一行是一个整数 T (T \le...原创 2020-02-23 01:32:40 · 364 阅读 · 0 评论 -
pell数列 动态规划入门 DP 计蒜客
思路:和斐波那契差不多,输入是1,2直接输出,其他则a[j]=(2*a[j-1]+a[j-2])%32767,注意及时取模。#include<stdio.h>int n,a[1000010];int main(){ a[1]=1,a[2]=2; scanf("%d",&n); int dp[n]; for(int i=0;i<...原创 2020-02-23 16:53:05 · 217 阅读 · 0 评论