当前位置: 首页 > article >正文

算法笔记day05

目录

1.最小公倍数

2.最长连续的子序列

3.字母收集


1.最小公倍数

求最小公倍数_牛客题霸_牛客网

算法思路:

这就是一道数学题,a,b的最小公倍数 = a * b / 最大公约数。

使用辗转相除法,求a,b的最大公约数。

#include <iostream>
using namespace std;

int gcb(int a, int b) //求最大公约数
{
    if(b == 0) return a;
    return gcb(b , a % b);
}

int main() 
{
   int a, b;
   cin >> a >> b;
   cout << a * b / gcb(a,b) << endl;
   return 0;
}

2.最长连续的子序列

数组中的最长连续子序列_牛客题霸_牛客网

 算法思路:

将数组排序,双指针遍历数组求最长即可

class Solution {
public:
    int MLS(vector<int>& arr) 
    {
        sort(arr.begin(), arr.end());
        int count = 0;
        int ret = 0;
        for(int i = 1; i < arr.size(); i++)
        {
            if(arr[i] - arr[i-1] == 1)// 说明是连续的
            {
                count++;
            }
            else if(arr[i] - arr[i-1] == 0)// 相等的
            {
                continue;
            }
            else //不连续
            {
                ret = max(ret, count);//更新最大值 
                count = 0;
            }
        }
        ret = max(ret, count);//特殊处理 1 2 3 4 5 6这种情况
        return ret + 1;
    }
};

3.字母收集

字母收集_牛客题霸_牛客网

算法思路:

这是一道动态规划、

1.状态表示:dp[i][j] 表示到达i,j位置的最大分数。

2.状态转移方程:直接分析最后一步,想到达dp[i][j]我只有两种情况,第一种从dp[i-1][j]到达,第二种是从dp[i][j-1]到达,dp[i][j]只需要取这两种情况的最大值 + i,j位置的分数。

处理一些细节问题,dp[i][j] = max(dp[i-1][j], dp[i][j-1]); + sorc, i和j是数组的边界怎么办??

输入的时候就从 i = 1 开始输出,就想到与空出最外层的一圈0.

#include <iostream>
using namespace std;

const int N = 510;
char g[N][N];
int dp[N][N];

int n, m;
int main() 
{
    
    cin >> n >> m;

    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            cin >> g[i][j];
        }
    }

    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            int soce = 0;
            if(g[i][j] == 'l') soce = 4;
            else if (g[i][j] == 'o') soce = 3;
            else if (g[i][j] == 'v') soce = 2;
            else if (g[i][j] == 'e') soce = 1;
            dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + soce;
        }
    }

    cout << dp[m][n] << endl;

    return 0;
}
// 64 位输出请用 printf("%lld")


http://www.kler.cn/news/362466.html

相关文章:

  • 【设计模式系列】命令模式
  • 顺序表(一)(数据结构)
  • raidrive 访问搭建的ftp服务报错超时的情况
  • java设计模式——装饰者模式
  • SQL 自学:游标(Cursors)的理解与应用
  • Golang 并发编程:Context 包的使用与并发控制
  • 面试总结分享:25道数据库测试题
  • HCIP-HarmonyOS Application Developer 习题(十)
  • 关于风险系统解读最全最专业文章:一篇文章讲透风险,跨学科搞懂风险游戏规则,风险信任风险主观性客观性风险本质人格特质与风险态度技术风险系统风险社会新产品风险
  • Flutter 中的 PopScope 小部件:全面指南
  • 阿里巴巴最新版Spring Security OAuth2.0认证授权笔记开源
  • 拼三角问题
  • 三菱FX5U PLC程序容量设置
  • vue-router钩子中调用ElMessage等样式出错
  • curl,nc和telnet的用法以及其他常用工具(nc代理与重定向)
  • MySQL - Navicat自动备份MySQL数据
  • JVM-编译期处理与Java语法糖
  • 如何在 HarmonyOS NEXT 中使用 @Builder 装饰器优化 UI 组件的复用?
  • 金仓数据库×武汉人社:共塑大数据应用智慧平台
  • 论文阅读_大型语言模型增强强化学习调查
  • 使用QueryWrapper中IN关键字超过1000个参数后如何处理
  • Redis的Bin目录文件及常用命令
  • mapping source must be pairs of fieldnames and properties definition 解决方案
  • 桥接、NAT和仅主机三种网络模式对虚拟机IP地址分配的影响
  • 【Spring篇】Spring中的Bean管理
  • Ribbon客户端负载均衡策略测试及其改进