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;
}

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

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

相关文章

理想的以太网网络故障排查工具:LinkXpert M3

在排查铜缆、光纤和Wi-Fi以太网故障时&#xff0c;通常需要多种昂贵的工具&#xff0c;操作起来会很复杂。因此&#xff0c;我们推出了LinkXpert M3 —— 一个专为铜缆、光纤和Wi-Fi以太网网络故障排查而设计的工具。它功能强大、体积小巧、性价比高&#xff0c;无疑是您值得信…

Git如何设置和修改当前分支跟踪的上游分支

目录 前言 背景 设置当前分支跟踪的上游分支 当前分支已有关联&#xff0c;删除其关联&#xff0c;重新设置上游 常用的分支操作 参考资料 前言 仅做学习记录&#xff0c;侵删 背景 在项目开发过程中&#xff0c;从master新建分支时&#xff0c;会出现没有追踪的上游分…

专业版pycharm与服务器连接

一、先连接服务器 先创建配置&#xff1a; 名字随便取一个&#xff1a; 点击测试连接测试是否连接成功&#xff1b; 二、添加解释器 添加解释器&#xff0c;这个解释器是最开始在xshell中创建好的虚拟环境&#xff0c;具体虚拟环境创建可参考这篇&#xff1a;AutoDL服务器深…

LabVIEW如何学习FPGA开发

FPGA&#xff08;现场可编程门阵列&#xff09;开发因其高性能、低延迟的特点&#xff0c;在实时控制和高速数据处理领域具有重要地位。LabVIEW FPGA模块为开发者提供了一个图形化编程平台&#xff0c;降低了FPGA开发的门槛。本篇文章将详细介绍LabVIEW FPGA开发的学习路径&…

ISDP010_基于DDD架构实现收银用例主成功场景

信息系统开发实践 &#xff5c; 系列文章传送门 ISDP001_课程概述 ISDP002_Maven上_创建Maven项目 ISDP003_Maven下_Maven项目依赖配置 ISDP004_创建SpringBoot3项目 ISDP005_Spring组件与自动装配 ISDP006_逻辑架构设计 ISDP007_Springboot日志配置与单元测试 ISDP008_SpringB…

中学数学:一个函数值计算题

在数学的领域中&#xff0c;函数是一种描述变量之间关系的桥梁&#xff0c;它能够揭示出看似复杂现象背后的简洁规律。通过函数&#xff0c;我们可以预测、分析并解决实际问题。在这张图片中&#xff0c;我们看到了一位数学爱好者手写的解题过程&#xff0c;它展示了如何巧妙地…

#渗透测试#漏洞挖掘#红蓝攻防#常见未授权访问漏洞汇总

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

基于Oauth2的SSO单点登录---前端

Vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统框架&#xff0c;提供了丰富的组件和功能&#xff0c;可以帮助开发者快速搭建现代化的后台管理系统。 一、基本知识 &#xff08;一&#xff09;Vue-element-admin 的主要文件和目录 vue-element-admin/ |--…

华为 AI Agent:企业内部管理的智能变革引擎(11/30)

一、华为 AI Agent 引领企业管理新潮流 在当今数字化飞速发展的时代&#xff0c;企业内部管理的高效性与智能化成为了决定企业竞争力的关键因素。华为&#xff0c;作为全球领先的科技巨头&#xff0c;其 AI Agent 技术在企业内部管理中的应用正掀起一场全新的变革浪潮。 AI Ag…

RustDesk内置ID服务器,Key教程

RustDesk内置ID服务器&#xff0c;Key教程 首先需要准备一个域名&#xff0c;并将其指定到你的 rustdesk 服务器 ip 地址上&#xff0c;这里编译采用的是Github Actions &#xff0c;说白了是就workflows&#xff0c;可以创建一些自动化的工作流程&#xff0c;例如代码的检查&a…

Wend看源码-Java-集合学习(List)

摘要 本篇文章深入探讨了基于JDK 21版本的Java.util包中提供的多样化集合类型。在Java中集合共分类为三种数据结构&#xff1a;List、Set和Queue。本文将详细阐述这些数据类型的各自实现&#xff0c;并按照线程安全性进行分类&#xff0c;分别介绍非线程安全与线程安全的实现方…

阿里云新用户服务器配置

创建和链接实例 创建实例&#xff0c;点击左侧标签栏总的实例&#xff0c; 找到链接帮助 根据帮助中的ip信息&#xff0c;然后启用vscode的ssh链接 ctrlp选择配置&#xff0c;输入公网的ip即可 passwd修改root密码 安装conda 参考 https://blog.csdn.net/adreammaker/arti…

五金产品视觉检测

五金产品种类繁多&#xff0c;且与我们的日常生活紧密有关&#xff0c;依照加工工艺的不同&#xff0c;五金产品有压铸件&#xff0c;五金冲压件&#xff0c;铸件等&#xff0c;无论是哪种加工方式&#xff0c;产品总会存在各式各样的问题&#xff0c;今天我们就五金产品的缺陷…

拼多多纠偏,能否实现买卖平权?

科技新知 原创作者丨江蓠 编辑丨蕨影 当曾将仅退款、运费险作为标配的电商平台们开始听到商家诉求&#xff0c;有意优化营商环境&#xff0c;作为“仅退款”服务发起者的拼多多也坐不住了。 在推出一揽子减免计划讨好中小商家之后&#xff0c;拼多多近期被传正在内测精选用户…

XGPT用户帮助手册

文章目录 20242024.12.27 摘要 本文介绍如何使用XGPT软件, XGPT融合了当前最先进的人工智能技术&#xff0c;并专为国内用户优化。 2024 2024.12.27 XGPT v1正式发布, 特色功能: 具备图像文本多模态处理功能包含GPT等最先进模型国内可访问 B站视频介绍 图1 XGPT v1 快照

低代码开源项目Joget的研究——Joget7社区版安装部署

大纲 环境准备安装必要软件配置Java配置JAVA_HOME配置Java软链安装三方库 获取源码配置MySql数据库创建用户创建数据库导入初始数据 配置数据库连接配置sessionFactory编译下载tomcat启动下载aspectjweaver移动jw.war文件编写脚本运行 测试参考资料 Joget&#xff0c;作为一款开…

后端开发如何高效使用 Apifox?

Apifox 是一个 API 协作开发平台&#xff0c;后端、前端、测试都可以使用 Apifox 来提升团队的工作效率。对于后端开发者而言&#xff0c;Apifox 的核心功能主要包括四个模块&#xff1a;调用 API、定义 API、开发与调试 API 以及生成 API 文档。本文将详细介绍后端开发人员如何…

flask后端开发(11):User模型创建+注册页面模板渲染

目录 一、数据库创建和配置信息1.新建数据库2.数据库配置信息3.User表4.ORM迁移 二、注册页面模板渲染1.导入静态文件2.蓝图注册路由 一、数据库创建和配置信息 1.新建数据库 终端中 CREATE DATABASE zhiliaooa DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;2…

极客说|微软新模型:Phi-4 来了

作者&#xff1a;魏新宇 - 微软 AI 全球黑带高级技术专家 「极客说」 是一档专注 AI 时代开发者分享的专栏&#xff0c;我们邀请来自微软以及技术社区专家&#xff0c;带来最前沿的技术干货与实践经验。在这里&#xff0c;您将看到深度教程、最佳实践和创新解决方案。关注「极客…

redis相关数据类型介绍

当然&#xff0c;Redis 作为一个高性能的键值存储系统&#xff0c;提供了多种数据类型来支持不同的应用场景。 1. String&#xff08;字符串&#xff09; • 定义&#xff1a;Redis 最基本的数据类型&#xff0c;用于存储字符串值。 • 操作&#xff1a;SET、GET、INCR、DECR、…