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

GXUOJ-算法-第一次作业

1.整数划分

问题描述

GXUOJ | 整数划分

题解

#include<bits/stdc++.h>
using namespace std;
const int N=1010,mod=1e9+7;int n;
int f[N];int main(){cin>>n;f[0]=1;for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){f[j]=(f[j]+f[j-i])%mod;}}cout<<f[n];
}

2.汉诺塔

问题描述

GXUOJ | 汉诺塔

题解

#include<bits/stdc++.h>
using namespace std;
int n;void hnt(int n,char A,char B,char C){if(n==1) cout<<"Move disk "<<n<<" from "<<A<<" to "<<C<<endl;else{hnt(n-1,A,C,B);cout<<"Move disk "<<n<<" from "<<A<<" to "<<C<<endl;hnt(n-1,B,A,C);}	
}int main(){cin>>n;hnt(n,'A','B','C');return 0;
}

3.算法训练 排列问题

问题描述

GXUOJ | 算法训练 排列问题

题解

#include <bits/stdc++.h>
using namespace std;// 定义全局变量n表示排列的元素个数,k表示要找的第k个排列
int n, k;
// 二维数组table用于存储限制条件,table[i][j]表示j - 1能否出现在i - 1后面
// 1标识 j-1可以出现在 i-1后面  0 标识不能
// 并保证第i行第i列为0
int table[20][20];
// 数组l用于存储当前生成的排列
int l[20];
// sum用于记录满足条件的排列的数量
int sum = 0;int main() {// 输入排列元素个数n和要找的第k个排列cin >> n >> k;// 读取限制条件表for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {// 输入table[i][j]的值,0表示不能,1表示能cin >> table[i][j];}}// 初始化排列为0到n - 1for (int i = 0; i < n; ++i) {l[i] = i;}// 使用do - while循环生成全排列并检查是否满足条件do {// flag用于标记当前排列是否满足限制条件bool flag = true;// 检查相邻元素是否满足限制条件for (int i = 0; i < n - 1; ++i) {// 如果当前相邻元素不满足限制条件(table值为0)if (!table[l[i]][l[i + 1]]) {// 将flag设为false,表示不满足条件flag = false;// 跳出内层循环,不再继续检查后续相邻元素break;}}// 如果当前排列满足限制条件if (flag) {// 满足条件的排列数量加1sum++;// 如果找到第k个满足条件的排列if (sum == k) {// 跳出外层循环break;}}} while (next_permutation(l, l + n));	//C++标准库中的一个循环结构,用于生成数组l所有元素的全排列 // 输出结果for (int i = 0; i < n; ++i) {// 输出排列中的元素cout << l[i];// 如果不是最后一个元素,则输出一个空格if (i < n - 1) {cout << ' ';}}return 0;
}

思路解析
 

  1. 布尔变量 flag 的作用

    • flag 就像是一个 “标记器”,初始化为 true 时,它假设当前生成的排列是满足所有限制条件的。在后续对排列的检查过程中,如果发现任何不符合限制条件的情况,就把 flag 设为 false。这样,当整个检查过程结束后,通过查看 flag 的值,就能知道这个排列是否满足所有限制条件。
  2. for 循环遍历相邻元素对

    • for (int i = 0; i < n - 1; ++i) 这个循环的目的是依次检查排列中每一对相邻的元素。因为要检查相邻元素关系,所以循环到 n - 1 即可,因为 l[n - 1] 没有下一个相邻元素可检查了。
    • 对于每一对相邻元素 (l[i], l[i + 1]),程序会去查看 table[l[i]][l[i + 1]] 的值。这里的 table 数组存储着限制条件,table[l[i]][l[i + 1]] 表示 l[i + 1] 这个数能否出现在 l[i] 这个数后面。
  3. 判断与处理

    • 如果 table[l[i]][l[i + 1]] 为 0,这就表明在给定的限制条件下,l[i + 1] 不允许出现在 l[i] 后面,也就意味着当前排列不满足限制条件。此时,将 flag 设为 false,并使用 break 跳出内层 for 循环。因为只要发现一对不满足条件的相邻元素,就可以确定整个排列不满足条件了,无需再检查后面的相邻元素对。
  4. 实例说明

    • 假设 n = 3,限制条件 table 如下:

      0 1 1
      1 0 0
      0 1 0
      
       

      并且当前生成的排列 l 为 [1, 0, 2]

    • 初始化 flag = true

    • 进入 for 循环:

      • 当 i = 0 时,相邻元素对是 (l[0], l[1]),即 (1, 0)。查看 table[1][0](因为 l[0]=1l[1]=0),table[1][0] = 1,说明 0 可以出现在 1 后面,继续循环。
      • 当 i = 1 时,相邻元素对是 (l[1], l[2]),即 (0, 2)。查看 table[0][2](因为 l[1]=0l[2]=2),table[0][2] = 1,说明 2 可以出现在 0 后面。
    • 由于整个循环过程中没有出现 table[l[i]][l[i + 1]] 为 0 的情况,所以 flag 仍然为 true,这就表示排列 [1, 0, 2] 满足限制条件。

    • 再假设当前生成的排列 l 为 [0, 2, 1]

    • 初始化 flag = true

    • 进入 for 循环:

      • 当 i = 0 时,相邻元素对是 (l[0], l[1]),即 (0, 2)。查看 table[0][2]table[0][2] = 1,继续循环。
      • 当 i = 1 时,相邻元素对是 (l[1], l[2]),即 (2, 1)。查看 table[2][1]table[2][1] = 0,这表明 1 不允许出现在 2 后面,所以将 flag 设为 false 并跳出循环。此时就确定排列 [0, 2, 1] 不满足限制条件。

通过这种方式,程序可以逐个检查生成的排列是否符合给定的限制条件。

4.数塔问题

问题描述

GXUOJ | 数塔问题

题解

#include <bits/stdc++.h>
using namespace std;const int MAX_N = 101;int main() {int n;cin >> n; // 读取数塔层数int f[MAX_N][MAX_N]; // 存储数塔的值int a[MAX_N][MAX_N]; // 存储到每个点的最大路径和// 读取数塔的每一层的数字for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {cin >> a[i][j];}}// 初始化最后一层的最大路径和for (int i = 0; i < n; i++) {f[n - 1][i] = a[n - 1][i];}// 从下到上计算每一层的最大路径和for (int i = n - 2; i >= 0; i--) {for (int j = 0; j <= i; j++) {f[i][j] = max(f[i + 1][j], f[i + 1][j + 1]) + a[i][j];}}// 输出从顶部到底部的最大路径和cout << f[0][0] << endl;return 0;
}

相关文章:

GXUOJ-算法-第一次作业

1.整数划分 问题描述 GXUOJ | 整数划分 题解 #include<bits/stdc.h> using namespace std; const int N1010,mod1e97;int n; int f[N];int main(){cin>>n;f[0]1;for(int i1;i<n;i){for(int ji;j<n;j){f[j](f[j]f[j-i])%mod;}}cout<<f[n]; } 2.汉诺塔…...

Springboot项目Druid运行时动态连接多数据源的功能

项目支持多数据库连接是个很常见的需求&#xff0c;这不仅是要在编译前连已经知道的多个数据库&#xff0c;有时还要在程序运行时连后期增加的多个数据源来获得数据。 一、编译前注册数据库连接 1.引入依赖包 <!-- springboot 3.x --><dependency><groupId&g…...

字符串匹配——KMP算法

前言 刷到字符串匹配的力扣题了【28. 实现 strStr() 】&#xff0c;这题简单吧用库函数做就可以&#xff0c;说难吧&#xff0c;就得引出大名鼎鼎的线性匹配算法——KMP。 目录 KMP 算法背景与原理算法优势 前缀表1. 构建Next数组2. 搜索匹配 KMP 算法背景与原理 KMP&#x…...

Qt开发技术【下拉复选框 MultiSelectComboBox 自定义全选项】

继承ComboBox完成下拉复选框 自定义全选项 效果图 整个控件继承于QCombobox类。主要修改QLineEdit、QListWidget这两部分&#xff0c;QComboBox提供如下接口&#xff0c;可以将这两部分设置为新建的QLineEdit、QListWidget对象 CMultiSelectComboBox::CMultiSelectComboBo…...

20_HTML5 SSE --[HTML5 API 学习之旅]

HTML5 Server-Sent Events (SSE) 是一种技术&#xff0c;它允许服务器向浏览器推送更新。与传统的轮询不同&#xff0c;SSE提供了真正的单向实时通信通道&#xff1a;服务器可以主动发送数据到客户端&#xff0c;而不需要客户端发起请求。这对于实现实时更新的应用非常有用&…...

jetson Orin nx + yolov8 TensorRT 加速量化 环境配置

参考【Jetson】Jetson Orin NX纯系统配置环境-CSDN博客 一 系统环境配置&#xff1a; 1.更换源&#xff1a; sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list2.更新源&#xff1a; sudo apt upgradesudo apt updatesudo apt dist-upgrade sudo apt-get updat…...

Android Studio IDE环境配置

​需要安装哪些东西&#xff1a; Java jdk Java Downloads | OracleAndroid Studio 下载 Android Studio 和应用工具 - Android 开发者 | Android DevelopersAndroid Sdk 现在的Android Studio版本安装时会自动安装&#xff0c;需要注意下安装的路径Android Studio插件…...

PTA 7-2 0/1背包问题(回溯法) 作者 王东 单位 贵州师范学院

0/1背包问题。给定一载重量为W的背包及n个重量为wi、价值为vi的物体&#xff0c;1≤i≤n,要求重量和恰好为W具有最大的价值。 输入格式: 第一行输入背包载重量W及背包个数n&#xff0c;再依次输入n行&#xff0c;每行为背包重量wi和价值vi。 输出格式: 第一行输出装入背包内…...

Matlab环形柱状图

数据准备&#xff1a; 名称 数值 Aa 21 Bb 23 Cc 35 Dd 47 保存为Excel文件后&#xff1a; % Load data from Excel file filename data.xlsx; % Ensure the file is in the current folder or provide full path dataTable readtable(filena…...

【AI大模型】探索GPT模型的奥秘:引领自然语言处理的新纪元

目录 &#x1f354; GPT介绍 &#x1f354; GPT的架构 &#x1f354; GPT训练过程 3.1 无监督的预训练语言模型 3.2 有监督的下游任务fine-tunning &#x1f354; 小结 学习目标 了解什么是GPT.掌握GPT的架构.掌握GPT的预训练任务. &#x1f354; GPT介绍 GPT是OpenAI公…...

5.Python爬虫相关

爬虫 爬虫原理 爬虫&#xff0c;又称网络爬虫&#xff0c;是一种自动获取网页内容的程序。它模拟人类浏览网页的行为&#xff0c;发送HTTP请求&#xff0c;获取网页源代码&#xff0c;再通过解析、提取等技术手段&#xff0c;获取所需数据。 HTTP请求与响应过程 爬虫首先向…...

Windows系统上配置eNSP环境的详细步骤

华为eNSP&#xff08;Enterprise Network Simulation Platform&#xff09;是一款针对华为数通网络设备的网络仿真平台&#xff0c;用于辅助工程师进行网络技术学习、方案验证和故障排查等工作。以下是在Windows系统上配置eNSP环境的详细步骤&#xff1a; 1. 准备工作 下载安…...

Database.NET——一款轻量级多数据库客户端工具

文章目录 Database.NET简介下载使用使用场景总结 Database.NET简介 Database.NET 是一个功能强大且易于使用的数据库管理工具&#xff0c;适用于多种数据库系统。它为开发者和数据库管理员提供了一个统一的界面&#xff0c;可以方便地管理和操作不同类型的数据库。 支持的数据…...

新浪微博C++面试题及参考答案

多态是什么&#xff1f;请详细解释其实现原理&#xff0c;例如通过虚函数表实现。 多态是面向对象编程中的一个重要概念&#xff0c;它允许不同的对象对同一消息或函数调用做出不同的响应&#xff0c;使得程序具有更好的可扩展性和灵活性。 在 C 中&#xff0c;多态主要通过虚函…...

计算机视觉目标检测-1

文章目录 摘要Abstract1.目标检测任务描述1.1 目标检测分类算法1.2 目标定位的简单实现思路1.2.1 回归位置 2.R-CNN2.1 目标检测-Overfeat模型2.1.1 滑动窗口 2.2 目标检测-RCNN模型2.2.1 非极大抑制&#xff08;NMS&#xff09; 2.3 目标检测评价指标 3.SPPNet3.1 spatial pyr…...

【物联网技术与应用】实验15:电位器传感器实验

实验15 电位器传感器实验 【实验介绍】 电位器可以帮助控制Arduino板上的LED闪烁的时间间隔。 【实验组件】 ● Arduino Uno主板* 1 ● 电位器模块* 1 ● USB电缆*1 ● 面包板* 1 ● 9V方型电池* 1 ● 跳线若干 【实验原理】 模拟电位器是模拟电子元件&#xff0c;模…...

java常用类(上)

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;javase &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一、包装类 1.1包装类…...

包管理工具npm、yarn、pnpm、cnpm详解

1. 包管理工具 1.1 npm # 安装 $ node 自带 npm# 基本用法 npm install package # 安装包 npm install # 安装所有依赖 npm install -g package # 全局安装 npm uninstall package # 卸载包 npm update package # 更新包 npm run script #…...

CI/CD是什么?

CI/CD 定义 CI/CD 代表持续集成和持续部署&#xff08;或持续交付&#xff09;。它是一套实践和工具&#xff0c;旨在通过自动化构建、测试和部署来改进软件开发流程&#xff0c;使您能够更快、更可靠地交付代码更改。 持续集成 (CI)&#xff1a;在共享存储库中自动构建、测试…...

[Java]合理封装第三方工具包(附视频)

-1.视频链接 视频版: 视频版会对本文章内容进行详细解释 [Java]合理封装第三方工具包_哔哩哔哩_bilibili 0.核心思想 对第三方工具方法进行封装,使其本地化,降低记忆和使用成本 1.背景 在我们的项目中,通常会引用一些第三方工具包,或者是使用jdk自带的一些工具类 例如: c…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...