[Algorithm][综合训练][kotori和n皇后][取金币][矩阵转置]详细讲解

news2024/11/27 22:32:54

目录

  • 1.kotori和n皇后
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 2.取金币
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 3.矩阵转置
    • 1.题目链接
    • 2.算法原理详解 && 代码实现


1.kotori和n皇后

1.题目链接

  • kotori和n皇后

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

  • 解法:哈希表 + 数学思维

    • 重点:使⽤哈希表标记⾏列以及两个对⻆线
      请添加图片描述
    #include <iostream>
    #include <unordered_set>
    using namespace std;
    
    int main()
    {
        int k = 0, t = 0;
        cin >> k;
        
        unordered_set<long long> row;
        unordered_set<long long> col;
        unordered_set<long long> dig1; // 主对角线
        unordered_set<long long> dig2; // 副对角线
        
        int ret = 0x3f3f3f3f; // 防止没有互相攻击的
        for(int i = 0; i < k; i++)
        {
            int x, y;
            cin >> x >> y;
            
            if(ret != 0x3f3f3f3f)
            {
                continue;
            }
            
            if(row.count(y) || col.count(x) || dig1.count(y - x) || dig2.count(y + x))
            {
                ret = i + 1;
            }
            
            row.insert(y);
            col.insert(x);
            dig1.insert(y - x);
            dig2.insert(y + x);
        }
        
        cin >> t;
        while(t--)
        {
            int i = 0;
            cin >> i;
            
            if(i >= ret)
            {
                cout << "Yes" << endl;
            }
            else
            {
                cout << "No" << endl;
            }
        }
        
        return 0;
    }
    

2.取金币

1.题目链接

  • 取金币

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

  • 解法:动态规划 -> 区间DP
    • 状态表示dp[i][j]:区间[i, j]的金币全部拿走,能获得的最大积分是多少

    • 状态转移方程
      请添加图片描述

    • 初始化

      • 原始表两边各加一格,填入1
      • DP表多加两行两列,全部初始化为0
        请添加图片描述
    • 填表顺序:从下往上,从左往右

    • 返回值dp[1][n]

    int getCoins(vector<int>& coins) 
    {
        int n = coins.size();
    
        vector<int> arr(n + 2, 0);
        arr[0] = arr[n + 1] = 1;
        for(int i = 1; i <= n; i++)
        {
            arr[i] = coins[i - 1];
        }
    
        vector<vector<int>> dp(n + 2, vector<int>(n + 2, 0));
        for(int i = n; i >= 1; i--)
        {
            for(int j = i; j <= n; j++)
            {
                for(int k = i; k <= j; k++)
                {
                    dp[i][j] = max(dp[i][j], 
    							   dp[i][k - 1] + dp[k + 1][j] + arr[i - 1] * arr[k] * arr[j + 1]);
                }
            }
        }
    
        return dp[1][n];
    }
    

3.矩阵转置

1.题目链接

  • 矩阵转置

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

  • 解法:数学 -> 转置前和转置后下标的关系
    请添加图片描述

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
        int n = 0, m = 0;
        cin >> n >> m;
    
        vector<vector<int>> nums(n, vector<int>(m, 0));
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                cin >> nums[i][j];
            }
        }
    
        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                // ret[i][j] = arr[j][i]
                cout << nums[j][i] << " ";
            }
            cout << endl;
        }
    
        return 0;
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2099908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Yapi部署文档

Yapi是高效、易用、功能强大的API管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务 官网地址&#xff1a;Yapi 环境&#xff1a; l Git l NodeJs&#xff08;7.6&#xff09; l Mongodb&#xff08;2.6&#xff09; 1、 NodeJs的安装 获取资源 …

嵌入式硬件-ARM处理器架构,CPU,SOC片上系统处理器

多进程空间内部分布图&#xff1a;注意&#xff1a;创建线程实际使用兑取空间&#xff0c;栈区独立 ARM处理器架构&#xff1a; 基于ARM920T架构的CPU:以下时哈佛结构ARM920T是ARM公司的32位RISC&#xff08;精简指令集计算机&#xff09;处理器内核。它具有以下特点&#xff1…

day-47 组合

思路 回溯&#xff1a;利用个dfs方法递归调用&#xff0c;每个元素有选或不选两种抉择&#xff0c;当选中元素个数等于k时&#xff0c;将链表p加入答案&#xff0c;当idsn且选中元素个数小于n时&#xff0c;直接返回 解题过程 每次选中元素调用dfs方法后记得还原 Code class…

【数据结构】顺序表和链表——顺序表(包含丰富算法题)

文章目录 1. 线性表2. 顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1. 线性表 线性表&#xff08;linear list&#xff09;…

vivado 定义时间约束

定义时间约束和 例外情况 在本实验中&#xff0c;您将学习两种为设计创建约束的方法。您必须使用 AMD Vivado™IDE中包含的AMD Kintex™7 CPU网表示例设计。 第一步&#xff1a;打开示例项目 1.打开Vivado IDE。 •在Linux上&#xff1a; 1.更改实验室材料的存储目录。 cd&…

HarmonyOS--后台代理提醒

一、概述 HarmonyOS提供后台代理提醒功能&#xff0c;在应用退居后台或退出后&#xff0c;计时和提醒通知功能被系统后台代理接管。后台代理提醒就是由系统后台进程代理应用的提醒功能。后台代理提醒服务通过reminderAgentManager模块提供提醒定义、创建提醒、取消提醒等能力。…

zdppy+vue3+onlyoffice文档管理系统实战 20240902 上课笔记 登录功能优化

遗留问题 1、登录以后跳转最近文档2、如果用户没有登录应该自动跳转登录页面3、如果用户的token校验失败&#xff0c;应该自动调整登录界面4、按回车键自动跳转登录页面 登录以后跳转最近文档 const router useRouter() router.push("/")实际代码&#xff1a; c…

C++篇:C向C++迈进(下)

目录 引言 缺省参数 1.缺省参数的概念 2.缺省参数的分类 2.1 全缺省 2.2 半缺省 3.注意事项 函数重载 1.函数重载的定义 2.函数重载的基本规则 3.函数重载的运用场景 引用 1.引用的概念 2.引用的主要特性 3.常引用 4.引用的使用场景 4.1 函数参数传递 4.2 函…

计算机网络-VRRP基础概念

回顾一下以前我们学习的网络通信基础&#xff0c;终端通过交换机可以相互进行通信&#xff0c;而如果是不同网段间的通信需要经过三层网关&#xff0c;网关进行路由寻址和转发&#xff0c;所以基本的网络结构就是终端--交换机--路由器网关--网络出口--Internet。 一、VRRP虚拟路…

逻辑回归算法详解

目录 原理推导 逻辑回归求解 项目实战--信用卡欺诈检测 数据分析与预处理 数据读取与分析 样本不均衡解决方案 特征标准化 下采样方案 交叉验证 模型评估方法 正则化惩罚 逻辑回归模型 参数对结果的影响 混淆矩阵 分类阈值对结果的影响 过采样方案 SMOTE数据生…

点击率预测模型Embedding层的学习和训练

导读&#xff1a; 本文将简要介绍推荐模型的发展历史&#xff0c;现状&#xff0c;和下一步的研究趋势。并重点介绍针对embedding数据的模型训练及优化。主要包含以下几大部分内容&#xff1a; CTR预测模型&#xff08;CTR Models&#xff09;连续值处理&#xff08;Continuou…

OpenAI“草莓项目”最快今年秋季发布!苹果将于9月10号推出首款AI iPhone|AI日报

文章推荐 吴恩达辞任Landing AI CEO&#xff0c;专注AI投资&#xff1f;数学家斯蒂芬预言哲学家引领AI未来&#xff5c;AI日报 与人类产生情感共鸣&#xff1f;数字华夏推出“夏澜”人形机器人&#xff1b;微软Azure AI语音服务推出虚拟人形象&#xff5c;AI日报 今日热点 …

行程问题

某直升机原定以260公里的时速飞往目的地&#xff0c;因任务紧急&#xff0c;飞行时速提高到360公里&#xff0c;结果提前1小时到达&#xff0c;则总的航程是&#xff08; &#xff09;公里。 A 900 B 936【正确答案】 C 1200 D 1296 第一步&#xff0c;本题考察行程问题&#x…

自行车租赁管理系统设计与实现

第三章 系统分析 3.1 系统可行性分析 可行性研究(Feasibility Study)是通过对项目的主要内容和配套条件&#xff0c;如市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等&#xff0c;从技术、经济、工程等方面进行调查研究和分析比较&…

使用mybatis对学生管理系统的完整功能实现

一、什么是mybatis: MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将接口和 Java 的 POJOs(Pla…

大赛题目公布,鸣志电器,对不起了

大家好&#xff0c;我是博主&#xff0c;夏目 即9/2发布组织第一届 电机电磁仿真大赛后&#xff0c;有很多朋友跃跃欲试&#xff0c;但也有不少顾虑。 跃跃欲试的原因是&#xff0c;对于这种新颖的活动&#xff0c;参与其中&#xff0c;也是一种乐趣&#xff0c;一种经验的积…

什么是I2C总线?

1.什么是I2C&#xff1f; 1.1 I2C的由来 在电视机内部电路中&#xff0c;众多功能需要用到许多集成电路IC来实现&#xff0c;包括主控器件微控制器和众多外围设备器件。这些器件相互之间要传递数据信息&#xff0c;那么就需要用导线相互连接&#xff0c;如此众多IC器件的互连&…

ArcGIS Pro 发布松散型切片

使用ArcGIS Pro发布松散型切片问题&#xff0c;有时候会出现切片方案写了松散型&#xff0c;但是自动切片完成后依然是紧凑型的问题&#xff0c;这时候可以采用手动修改然后再切片的方式。 1. 发布切片服务 选择手动切片方式 2. 手动修改服务的切片方案文件 修改cache服务…

htop的使用详解

1. htop简介&#xff1a; htop 是一个基于 ncurses 的跨平台进程查看器。 它与 top 类似&#xff0c;但允许您垂直和水平滚动&#xff0c;并使用指针设备&#xff08;鼠标&#xff09;进行交互。您可以观察系统上运行的所有进程及其命令行参数&#xff0c;以及以树形格式查看它…

Golang | Leetcode Golang题解之第392题判断子序列

题目&#xff1a; 题解&#xff1a; func isSubsequence(s string, t string) bool {n, m : len(s), len(t)f : make([][26]int, m 1)for i : 0; i < 26; i {f[m][i] m}for i : m - 1; i > 0; i-- {for j : 0; j < 26; j {if t[i] byte(j a) {f[i][j] i} else {…