[Algorithm][综合训练][合唱团][跳台阶扩展问题][矩阵最长递增路径]详细讲解

本文主要是介绍[Algorithm][综合训练][合唱团][跳台阶扩展问题][矩阵最长递增路径]详细讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1.合唱团
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 2.跳台阶扩展问题
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 3.矩阵最长递增路径
    • 1.题目链接
    • 2.算法原理详解 && 代码实现


1.合唱团

1.题目链接

  • 合唱团

2.算法原理详解 && 代码实现

  • 解法:动态规划

    • 状态表示

      • f[i][j]:从[i, j]中挑选,挑j个人,最后一个人必选,此时的最大乘积
      • g[i][j]:从[i, j]中挑选,挑j个人,最后一个人必选,此时的最小乘积
    • 状态转移方程
      请添加图片描述

    • 返回值max(f[n][k] ~ f[k][k])

    • 初始化:绿色圆圈部分全部初始化为正负无穷,保证不会参与比较
      请添加图片描述

    #include <iostream>
    #include <vector>
    using namespace std;int main()
    {const long long INF = 0x3f3f3f3f3f3f3f3f;int n = 0, k = 0, d = 0;cin >> n;vector<int> nums(n + 1, 0);for(int i = 1; i <= n; i++){cin >> nums[i];}cin >> k >> d;vector<vector<long long>> f(n + 1, vector<long long>(k + 1, 0));vector<vector<long long>> g(n + 1, vector<long long>(k + 1, 0));     // 初始化在填表中进行for(int i = 1; i <= n; i++){g[i][1] = f[i][1] = nums[i]; // 初始化for(int j = 2; j <= min(i, k); j++) // 挑选几个人{f[i][j] = -INF; // 初始化g[i][j] = INF;  // 初始化// 前⾯挑选的最后⼀个位置for(int prev = max(i - d, j - 1); prev <= i - 1; prev++){f[i][j] = max(max(f[prev][j - 1] * nums[i], g[prev][j - 1] * nums[i]), f[i][j]);g[i][j] = min(min(f[prev][j - 1] * nums[i], g[prev][j - 1] * nums[i]), g[i][j]);}}}long long ret = -INF;for(int i = k; i <= n; i++){ret = max(ret, f[i][k]);}cout << ret << endl;return 0;
    }
    

2.跳台阶扩展问题

1.题目链接

  • 跳台阶扩展问题

2.算法原理详解 && 代码实现

  • 解法一:动态规划
  • 解法二:规律
    #include <iostream>
    using namespace std;int main()
    {int n = 0;cin >> n;cout << (1 << (n - 1)) << endl;return 0;
    }
    

3.矩阵最长递增路径

1.题目链接

  • 矩阵最长递增路径

2.算法原理详解 && 代码实现

  • 解法记忆化搜索 --> 整理下来是为了再熟悉一下记忆化搜索,无它
    class Solution 
    {int n = 0, m = 0;int dx[4] = {1, -1, 0, 0};int dy[4] = {0, 0, 1, -1};vector<vector<int>> mem;
    public:int solve(vector<vector<int>>& matrix) {n = matrix.size(), m = matrix[0].size();mem.resize(n, vector<int>(m, -1));int ret = 1;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){ret = max(ret, DFS(i, j, matrix));}}return ret;}int DFS(int i, int j, const vector<vector<int>>& matrix){if(mem[i][j] != -1){return mem[i][j];}int len = 1;for(int k = 0; k < 4; k++){int x = i + dx[k], y = j + dy[k];if(x >= 0 && x < n && y >= 0 && y < m && matrix[x][y] > matrix[i][j]){len = max(len, 1 + DFS(x, y, matrix));}}mem[i][j] = len;return len;}
    };
    

这篇关于[Algorithm][综合训练][合唱团][跳台阶扩展问题][矩阵最长递增路径]详细讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

poj3261(可重复k次的最长子串)

题意:可重复k次的最长子串 解题思路:求所有区间[x,x+k-1]中的最小值的最大值。求sa时间复杂度Nlog(N),求最值时间复杂度N*N,但实际复杂度很低。题目数据也比较水,不然估计过不了。 代码入下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k