NEFU算法设计与分析课程设计

(一)动态规划问题

最大子矩阵问题

【题目描述】

有一个包含正数和负数的二维数组。一个子矩阵是指在该二维数据里,任意相邻的下标是1 * 1或更大的子数组。一个子矩阵的和是指该子矩阵中所有元素的和。本题中,把具有最大和的子矩阵称为最大子矩阵。

例如,如下数组的最大子矩阵位于左下角,其和为15。

0

-2

-7

0

9

2

-6

2

-4

1

-4

1

-1

8

0

-2

【输入】

是N * N个整数的数组。第一行是一个正整数N,表示二维方阵的大小。接下来是N2个整数(空格和换行隔开)。该数组的N2个整数,是以行序给出的。也就是,显示第一行的数,由左到右;然后是第二行的数,由左到右,等等。

N可能达到100,数组元素的范围是[-127,127]

【输出】

最大子矩阵的和。

【输入样例】

4

 0 -2 -7 0 9 2 -6 2

-4 1 -4  1 -1 8 0 -2

【输出样例】

15

#include <iostream>
#include <vector>
#include <climits>
using namespace std;
//f 是求一维数组最大子数组和的函数
//g 是求二维矩阵最大子矩阵和的函数
//a 是输入的二维矩阵
//n 是矩阵的大小
//l 和 r 分别是左边界和右边界
//t 是累加和的一维数组
//m 是当前最大的子数组和或子矩阵和
//c 是当前累加的子数组和
int f(vector<int>& a) {int m = INT_MIN, c = 0;for (int x : a) {c = max(x, c + x);//对于每个元素,计算在当前位置结束的最大子数组和m = max(m, c);//更新全局最大子数组和}return m;
}
int g(vector<vector<int>>& a) {int n = a.size();int m = INT_MIN;for (int l = 0; l < n; ++l) {vector<int> t(n, 0);for (int r = l; r < n; ++r) {for (int i = 0; i < n; ++i) {t[i] += a[r][i];}int c = f(t);m = max(m, c);}}return m;
}
int main() {int n;cin >> n;vector<vector<int>> a(n, vector<int>(n));for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {cin >> a[i][j];}}cout << g(a) << endl;return 0;
}

(二)回溯法

括号生成问题

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出n = 3,生成结果为:["((()))", "(()())", "(())()", "()(())", "()()()"]。

#include <iostream>
#include <vector>
#include <string>using namespace std;
//O是已使用的左括号的数量
//p是已使用的右括号的数量
//r是结果
void backtrack(vector<string> &r, string &c, int o, int p, int m) {if (c.size() == m * 2) {r.push_back(c);return;}if (o < m) {c.push_back('(');backtrack(r, c, o + 1, p, m);c.pop_back();}if (p < o) {c.push_back(')');backtrack(r, c, o, p + 1, m);c.pop_back();}
}
vector<string> g(int n) {vector<string> r;string c;backtrack(r, c, 0, 0, n);return r;
}
int main() {int n;cin >> n;vector<string> r = g(n);for (const string &s : r) {cout << s << endl;}return 0;
}

(三)分支限界法

求解饥饿的小易问题

问题描述:

小易总是感到饥饿,所以作为章鱼的小易需要经常出去找贝壳吃。最开始,小易在一个初始位置x0.对于小易所处的当时位置x,它智能通过神秘的力量移动4 * x + 3或者8 * x +7。因为使用神秘力量要消耗太多体力,所以它最多只能使用神秘力量100000次。贝壳总生长在能被1000000007整除的位置(比如位置0、位置1000000007、位置2000000014等)。小易需要你帮忙计算最少使用多少次神秘力量就能吃到贝壳。

输入描述:

输入一个初始位置x0,范围为1-1000000006

输出描述:

输出小易最少需要使用神秘力量的次数,如果次数使用完还没找到贝壳,则输出-1.

输入样例

125000000

输出样例

1

#include <iostream>
#include <map>
#include <queue>
using namespace std;#define MOD 1000000007L
#define MAX 100000
//vist记录每个位置及其到起始位置的距离或使用力量次数
int main(){map<long,int> vist;long x;//存储初始位置while (cin>>x) {queue<long> q;q.push(x);vist[x]=1;long xx=1;while (q.size()) {x = q.front();q.pop();if (x==0)//找到贝壳break;if (vist[x] > MAX)continue;xx = ((x<<2)+3) % MOD;if (vist.find(xx) == vist.end())//新位置未被访问过{q.push(xx);vist[xx] = vist[x]+1;}xx = ((x<<3)+7) % MOD;if (vist.find(xx) == vist.end()){q.push(xx);vist[xx] = vist[x]+1;}}cout<<(q.size() ? vist[x]-1 : -1)<<endl;}return 0;
}

(四)网络流问题

流水问题

现在有m个池塘(从1到m开始编号,1为源点,m为汇点)及n条水渠。假设已经给出这n条水渠所连接的池塘和所能流过的水量,设计算法求水渠中所能流过的水的最大容量。示例如下:

输入:

4  5    //池塘数m和水渠数n

1  2   40   //所连接的池塘和所能流过的水量

1  4   20

2  4   20

2  3   30

3  4   10

输出:50    //最大流水量

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
//a代表邻接表
//e代表边
//adEdge代表添加边
//mF代表最大流函数
//f是累计的最大流量
const int INF = 1e9;
//f是边的起点
//t是边的终点
//c是边的容量
//f1是边的流量
struct Edge {int f, t, c, fl;
};
vector<vector<int>> a;
vector<Edge> e;
void adEdge(int f, int t, int c) {Edge e1 = {f, t, c, 0};Edge e2 = {t, f, c, 0};a[f].push_back(e.size());e.push_back(e1);a[t].push_back(e.size());e.push_back(e2);
}
//s是源点,k是汇点
//p数组用来记录路径
int mF(int s, int k) {int f = 0;while (true) {vector<int> p(a.size(), -1);queue<int> q;q.push(s);p[s] = s;//源点已被访问while (!q.empty() && p[k] == -1) {int u = q.front();q.pop();for (int i : a[u]) {Edge &x = e[i];if (p[x.t] == -1 && x.c - x.fl > 0) {q.push(x.t);p[x.t] = i;}}}if (p[k] == -1) break;int cF = INF;//表示路径上最小的剩余容量for (int u = k; u != s; u = e[p[u]].f) {cF = min(cF, e[p[u]].c - e[p[u]].fl);}for (int u = k; u != s; u = e[p[u]].f) {e[p[u]].fl += cF;//将路径上正向边的流量增加cFe[p[u]^1].fl -= cF;//将路径上反向边的流量减少cF}f += cF;}return f;
}int main() {int m, n;cin >> m >> n;a.resize(m + 1);for (int i = 0; i < n; ++i) {int f, t, c;cin >> f >> t >> c;adEdge(f, t, c);}int s = 1, k = m;int mf = mF(s, k);cout << mf << endl;return 0;
}

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

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

相关文章

Batch学习及应用案例

一、介绍 Batch是一种Windows操作系统中使用的批处理脚本语言&#xff0c;用于自动化执行一系列命令和操作。通过编写批处理脚本&#xff0c;可以实现自动化完成重复性或繁琐的任务&#xff0c;提高工作效率。 Batch脚本可以使用内置的命令和命令行工具&#xff0c;以及调用其…

2024.06.27【读书笔记】|医疗科技创新流程(第1章:需求发现 第一部分)【AI增强版】

第1章&#xff1a;需求发现 (Needs Finding) 1.1 战略聚焦 (Strategic Focus) 战略聚焦是医疗技术创新过程的起点。它要求创新者明确自己的使命、评估自身的强项与弱点&#xff0c;并据此确定项目接受标准。以下是对1.1小节的详细介绍&#xff1a; 定义使命&#xff1a;创新者…

使用飞书多维表格实现推送邮件

一、为什么用飞书&#xff1f; 在当今竞争激烈的商业环境中&#xff0c;选择一款高效、智能的办公工具至关重要。了解飞书的朋友应该都知道&#xff0c;飞书的集成能力是很强大的&#xff0c;能够与各种主流的办公软件无缝衔接&#xff0c;实现数据交互&#xff0c;提升工作效…

【Linux】防火墙命令

文章目录 1. 启动、停止和重启防火墙2. 防火墙状态查询3. 防火墙规则配置4. 防火墙规则查询5. 防火墙其他常用命令 1. 启动、停止和重启防火墙 启动防火墙&#xff1a;systemctl start firewalld停止防火墙&#xff1a;systemctl stop firewalld重启防火墙&#xff1a;systemc…

Gemalto SafeNet Luna HSM服务器硬件监控指标解读

在现代化的信息安全体系中&#xff0c;硬件安全模块&#xff08;HSM&#xff09;扮演着至关重要的角色&#xff0c;它负责保护和管理敏感的数据和密钥。Gemalto SafeNet Luna HSM作为一款高性能的硬件安全模块&#xff0c;广泛应用于金融、政府和企业等领域。为了确保Luna HSM的…

竞赛选题 python区块链实现 - proof of work工作量证明共识算法

文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…

vue3中通过vditor插件实现自定义上传图片、录入echarts、脑图、markdown语法的编辑器

1、下载Vditor插件 npm i vditor 我的vditor版本是3.10.2&#xff0c;大家可以自行选择下载最新版本 官网&#xff1a;Vditor 一款浏览器端的 Markdown 编辑器&#xff0c;支持所见即所得&#xff08;富文本&#xff09;、即时渲染&#xff08;类似 Typora&#xff09;和分屏 …

消息队列选型之 Kafka vs RabbitMQ

在面对众多的消息队列时&#xff0c;我们往往会陷入选择的困境&#xff1a;“消息队列那么多&#xff0c;该怎么选啊&#xff1f;Kafka 和 RabbitMQ 比较好用&#xff0c;用哪个更好呢&#xff1f;”想必大家也曾有过类似的疑问。对此本文将在接下来的内容中以 Kafka 和 Rabbit…

阿里AI-Spring Cloud Alibaba AI:快速搭建自己的通义千问

本文基于官方文档。 Spring AI 官方文档&#xff1a;Spring AI :: Spring AI Reference 中文文档&#xff1a;Spring AI 简介 - spring 中文网 (springdoc.cn) Spring AI 是 Spring 官方社区项目&#xff0c;旨在简化 Java AI 应用程序开发&#xff0c;让 Java 开发者像使用…

流光卡片,生成炫酷文字,开源API

https://fireflycard.shushiai.com/ 这是我的一个网站&#xff0c;流光卡片&#xff0c;主要功能是帮你制作酷炫的文字卡片&#xff0c;用精美的卡片让你的文字生动起来。 展示效果如下&#xff1a; 你可以用它制作卡片&#xff0c;来记录自己的表达。支持设定卡片背景、LOGO…

梗图生成器突然爆红;ElevenLabs发布IOS APP 高质量语音朗读手机各种文本内容;开源工作流架构ControlFlow

✨ 1: 梗图生成器 fabianstelzer 在Glif做的一个超强meme生成器 Glif 是一个工作流&#xff0c;能生成文字图片和视频&#xff0c;用工作流的形式可以完成很多的花样来。 最近爆红的梗图生成器&#xff0c;WOJAK MEME GENERATOR &#xff0c;也是用工作流的形式来生成这些有…

MetaGPT全面安装与配置指南

文章目录 MetaGPT环境配置1.1 检查Python版本1.2 拉取MetaGPT仓库1.3 拉取源码本地安装1.4 MetaGPT安装成果全流程展示1.5 尝试简单使用 MetaGPT的API调用2.1 本地部署大模型尝试安装必要的依赖下载并配置大模型配置API服务 2.2 讯飞星火API调用获取API密钥安装讯飞星火SDK调用…

宝塔面板之 wwwroot修改不了权限

宝塔使用Apache环境&#xff0c;搭建网站出现 You don’t have permission to access this resource.Server unable to read h出错时的解决办法 今天由于某些原因导致我宝塔 在Apache和Nginx运行环境下不断切换&#xff0c;结果我网站全部不能正常打不开了 结果我发现原本宝塔…

boss直聘招聘数据可视化分析

boss直聘招聘数据可视化分析 一、数据预处理二、数据可视化三、完整代码一、数据预处理 在 上一篇博客中,笔者已经详细介绍了使用selenium爬取南昌市web前端工程师的招聘岗位数据,数据格式如下: 这里主要对薪水列进行处理,为方便处理,将日薪和周薪的数据删除,将带有13薪…

1027. 最长等差数列(leetcode)

1027. 最长等差数列&#xff08;leetcode&#xff09; 题目描述 给你一个整数数组 nums&#xff0c;返回 nums 中最长等差子序列的长度。 回想一下&#xff0c;nums 的子序列是一个列表 nums[i1], nums[i2], …, nums[ik] &#xff0c;且 0 < i1 < i2 < … < ik &…

自媒体内容创作者必备:ChatGPT助你提升文章质量

随着自媒体的迅猛发展&#xff0c;越来越多的人加入到内容创作的行列。然而&#xff0c;要在这个竞争激烈的领域脱颖而出&#xff0c;不仅需要创意和独特的观点&#xff0c;更需要高质量的文章内容。在这方面&#xff0c;ChatGPT作为一个智能写作助手&#xff0c;能够帮助自媒体…

Dilworth定理学习笔记

最近做了两道题&#xff0c;都涉及到了这个定理&#xff0c;虽然我都没有用&#xff0c;不过学会这个定理确实有很多好处。 第一道是[TJOI2015] 组合数学&#xff0c;让你在一个矩阵中用最少的只能往右和往下的路径覆盖掉全部的点&#xff08;点有权值&#xff09;。这道题我一…

【区分vue2和vue3下的element UI Message 消息提示组件,分别详细介绍属性,事件,方法如何使用,并举例】

在 Vue 2 中&#xff0c;我们通常使用 Element UI 的 this.$message 方法来显示消息提示&#xff0c;而不是作为一个组件直接在模板中使用。然而&#xff0c;在 Vue 3 的 Element Plus 中&#xff0c;虽然 this.$message 的使用方式仍然保留&#xff0c;但官方文档可能更倾向于…

靠!AI绘画月入过万!是否现实?

前言 AI人工智能已经出现在了越来越多领域中&#xff0c;比如最近一段时间&#xff0c;AI绘画就受到了许多人的关注&#xff0c;一来&#xff0c;其背后隐藏的版权问题、替代性问题引发了人们的广泛讨论&#xff0c;再者&#xff0c;AI绘画在短期时间内成为了流量密码&#xf…

暑假追高必备:ChildLife全新钙镁锌小绿钙

2024年暑假将至&#xff0c;家长们对于孩子的健康关注再次提升&#xff0c;其中补钙成为许多家长关注的重点。暑假期间&#xff0c;孩子有更多时间进行户外活动&#xff0c;加上高温流汗多&#xff0c;身体的钙更容易流失&#xff0c;因此需要额外地补充。为此&#xff0c;美国…