算法题目记录

1.最短距离 

 

题目简化:

明确问题 + 算法提示:

1.如何判断同类之间的最短距离为0 ---> 并查集+路径压缩

2.如何存储任意两类的距离 ---> 邻接矩阵存储无向图

3.如何表示每个点属于哪一类 ---> 用数组id[节点]存储属于哪一类

4.如何算出任意两类之间的最短距离 ---> 最短路问题:Floyd算法(多源汇最短路,多个起点)[动态规划]

详细思路:

并查集+路径压缩

int find(int x)
{if (p[x] != x) p[x] = find(p[x]);return p[x];
}

Floyd算法

for (int t = 1; t <= k; t ++)
{for (int i = 1; i <= k; i ++){for (int j = 1; j <= k; j ++){d[i][j] = min(d[i][j], d[i][t] + d[t][j]);}}
}

代码: 

#include <iostream>
#include <cstring>using namespace std;const int N = 1e5 + 10, M = 510, INF = 0x3f3f3f3f;
int p[N], id[N];
int d[M][M]; //两个类之间的距离
int n, m, k;int find(int x)
{if (p[x] != x) p[x] = find(p[x]);return p[x];
}
bool check()
{for (int i = 2; i <= n; i ++)if (id[i] == id[i - 1] && find(i) != find(i - 1))return false;return true;        
}
int main()
{cin >> n >> m >> k;for (int i = 1; i <= n; i ++) p[i] = i;for (int i = 1, j = 1; i <= k; i ++) {int c;cin >> c;while (c --) id[j ++] = i;}memset(d, 0x3f, sizeof d);for (int i = 1; i <= k; i ++ ) d[i][i] = 0;for (int i = 1; i <= m; i ++){int u, v, x;cin >> u >> v >> x;if (!x) p[find(u)] = find(v);int a = id[u], b = id[v];d[a][b] = d[b][a] = min(d[a][b], x);}if (!check()) puts("No");else{puts("Yes");for (int t = 1; t <= k; t ++){for (int i = 1; i <= k; i ++){for (int j = 1; j <= k; j ++){d[i][j] = min(d[i][j], d[i][t] + d[t][j]);}}}for (int i = 1; i <= k; i ++){for (int j = 1; j <= k; j ++){if (d[i][j] == INF) d[i][j] = -1;cout << d[i][j] << ' ';}cout << endl;}}
}


2.奶牛报数

题目简化:

        将这n头牛按顺时针围成一个圈,然后选定一头牛开始从1报数,所有的牛报完数,每一头牛都有相应的报的数字,当报到的数落在[l, r)区间中,则表示该牛被选中制作牛肉

        限制条件:所选牛的重量总和最大且第一头牛所报的数尽量小的方案

        求:第一头牛所报的数

明确问题 + 算法提示:

        1.如何表示按顺时针围成一圈的牛?---> 破环成链

        2.如何算出报数在区间内牛的重量总和?---> 区间和:前缀和

        3.如何算出第一头牛所报的数? ---> 通过第i头牛报的数,算出第1头牛所报的数

图解分析: 

代码: 

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 1e5 + 10;
int n, l, r;
int a[2 * N], s[2 * N];int main()
{cin >> n;for (int i = 1; i <= n; i ++){cin >> a[i];a[i + n] = a[i];}//求前缀和for (int i = 1; i <= 2 * n; i ++) s[i] = s[i - 1] + a[i];cin >> l >> r;int len = r - l, res = -1, ans = 0;for (int i = 1; i <= 2 * n - len; i ++){int sum = s[i + len - 1] - s[i - 1], idx = l - i + 1;while (idx < 1) idx += n;if (sum > ans || sum == ans && idx < res){res = idx;ans = sum;}}cout << res << endl;
}


3.机器人跳跃问题

题目简化:

机器人初始有能量值e,机器人需要跳跃n个建筑,每个建筑有对应的高度,第i个建筑的高度

为h[i],机器人每次跳跃当前建筑,所花费的代价为e - h[i](即当e > h[i]时,能量增加e - h[i];当e < h[i]时,能量减少e - h[i]), 在每次跳跃后要保证能量值不能为负数

图示分析:

算法:递推 + 二分查找 

代码:

#include <iostream>
#include <algorithm>using namespace std;const int N = 1e5 + 10;
int n, h[N];bool judge(int e)
{for (int i = 1; i <= n; i ++){e = 2 * e - h[i];if (e < 0) return  false;if (e >= N) return true;}return true;
}
int main()
{scanf ("%d", &n);for (int i = 1; i <= n; i ++) scanf ("%d", &h[i]);int l = 0, r = N;while (l < r){int mid = (l + r) / 2;if (judge(mid)) r = mid;else l = mid + 1; }cout << l << endl;return 0;
}

注意:题目均来自AcWing

所有笔记总结目录-CSDN博客

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

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

相关文章

光伏组件积灰检测系统

光伏组件积灰检测系统是一种专门用于监测光伏组件表面灰尘积累情况的设备。以下是关于该系统的详细信息和特点&#xff1a; 系统概述 光伏组件积灰检测系统安装在光伏板的框架上&#xff0c;通过实时监测光伏组件表面的灰尘厚度、分布情况和清洁度&#xff0c;为运维人员提供…

Codeforces Round 948 (Div. 2) D. XORificator(哈希)

题目 n*m(n*m<3e5)的矩阵&#xff0c; 实际为t(t<1e4)组样例&#xff0c;但保证sum n*m不超过3e5 你可以选一行把所有01翻转&#xff0c;问最多可以让多少列只有一个1&#xff0c;然后把你翻转的行输出 思路来源 其实题还挺裸的&#xff0c;教了一下潘老师&#xff0…

UIAbility的使用

UIAbility概述 UIAbility是一种包含用户界面的应用组件&#xff0c;主要用于和用户进行交互。UIAbility也是系统调度的单元&#xff0c;为应用提供一系列的窗口&#xff0c;应用在这些窗口里绘制用户交互界面。 每一个UIAbility实例&#xff0c;都对应于一个最近任务列表中的任…

CART 算法【python,机器学习,算法】

CART(Classification and Regression Tree)分类回归树。使用基尼指数计算得到树的节点。基尼指数表示系统整体的不确定性&#xff0c; 不确定性越大&#xff0c;基尼指数越大&#xff0c;所以在决策树中&#xff0c;将加权基尼系数最小的特征作为树的决策节点。 公式推导 基尼…

28【Aseprite 作图】苹果——拆解

1 画苹果框架 左边:第一行 7 第二行 2 第三 四行1 竖着7行 竖着2行 竖着1 、1 行 横着2个 横着4个 苹果可以是左右对称的,完成上述后,水平翻转到右边 2 枝叶 第一行1 左边 2 3 4 行,各1 第5行,竖着4个 再横着3个 右边 竖着3个,然后斜着2个,然后斜着1个 最上面的,两个…

Java中的JSP与Servlet的详细解释

一、技术难点 在Java Web开发中&#xff0c;JSP&#xff08;Java Server Pages&#xff09;和Servlet是两个核心概念&#xff0c;它们各自有其技术难点。 JSP技术难点&#xff1a; JSP页面的生命周期管理&#xff1a;JSP页面在首次被访问时会被转换为Servlet&#xff0c;然后…

AI大模型下的微服务会有什么?

在人工智能领域&#xff0c;会使用到许多微服务来处理不同的任务。"微服务"指的是将一个大型应用拆分成一系列小的服务&#xff0c;每个服务运行在其独立的进程中&#xff0c;并通过轻量级的机制&#xff08;通常是HTTP RESTful API&#xff09;与其他服务通信。每个…

靶机Moonraker_1练习报告

Moonraker: 1靶机练习实践报告 一、安装靶机 靶机是.ova文件&#xff0c;需要用VirtualBox打开&#xff0c;但我习惯于使用VMWare,因此修改靶机文件&#xff0c;使其适用于VMWare打开。 解压ova文件&#xff0c;得到.ovf文件和.vmdk文件。 直接用VMWare打开.ovf文件即可。 …

webserver服务器从零搭建到上线(七)|Channel通道类和Poller抽象类

TcpServer是我们整个编写服务器的入口&#xff0c;其中有一个很重要的类&#xff1a;EventLoop事件分发器。 其实我们就可以把EventLoop当做我们的epoll_wait&#xff0c;它主要管理类一个Poller类&#xff0c;我们看名字就可以知道&#xff0c;Poller类应该封装了Epoll本身&a…

【服务器报错】Pycharm运行服务器代码提示 can‘t open file “本地文件路径“

1. 问题 Pycharm连接远程服务器&#xff0c;代码已经同步&#xff0c;运行时候报错 #模拟报错 bash: line 0: cd: G:/python/hhh/Hi: No such file or directory /home/hhh/anaconda3/envs/hard/bin/python: cant open file G:/python/hhh/hi/hei.py: [Errno 2] No such file…

顶级域名、主域名、子域名

在互联网上&#xff0c;域名系统(DNS)用于将人类可读的域名(如www.example.com映射到服务器的IP地址 域名可以分为多个部分&#xff0c;通常包括主域名(PrimaryDomain)和子域名(Subdomain)。 顶级域名 是域名系统的最高级别&#xff0c;通常代表特定的组织类型或国家 .com、…

springMVC工作流程

大家好&#xff0c;这里是教授.F 1.浏览器会先发送请求url&#xff0c;前端控制器/中央控制器/分发器&#xff08;也就是DispatcherServlet&#xff09;进行获取。 2.此时前端控制器会调用HandlerMapping处理器映射器&#xff0c;然后返回处理器执行器链&#xff08;HandlerExe…

Android Service 启动流程

在早些年学习Android的时候&#xff0c;对Service有过总结&#xff0c;但是主要是如何去使用&#xff0c;注意事项&#xff0c;startService和bindService的区别。 Android Service_public int onstartcommand(intent intent, int flags-CSDN博客 但是今天从源码来总结下fram…

论文笔记《基于深度学习模型的药物-靶标结合亲和力预测》

基于深度学习模型的药物-靶标结合亲和力预测 这是一篇二区的文章&#xff0c;算是一个综述&#xff0c;记录一下在阅读过程中遇到的问题。 文章目录 基于深度学习模型的药物-靶标结合亲和力预测前言一、蛋白质接触图谱二、为什么蛋白质图谱的准确性对DTA模型预测结果没有影响1…

使用Python类的构造函数和析构函数

1、问题背景 当使用Python类时&#xff0c;可以使用构造函数和析构函数来初始化和清理类实例。构造函数在创建类实例时自动调用&#xff0c;而析构函数在删除类实例时自动调用。 在上面的代码示例中&#xff0c;Person类具有一个构造函数__init__和一个析构函数__del__。构造…

【代码】自定义函数

你有没有听过 n! ? n!n(n-1)(n-2)21 你想不想有一个c函数 jc() 专门用来计算n!&#xff1f; 不好意思&#xff0c;没有&#xff01;c函数库说。没有咱自己可以造呀&#xff01; 哈喽大家好&#xff0c;我是学霸小羊&#xff0c;今天讲讲自定义函数。 自定义函数的定义格式…

网易面试:手撕定时器

概述&#xff1a; 本文使用STL容器-set以及Linux提供的timerfd来实现定时器组件 所谓定时器就是管理大量定时任务&#xff0c;使其能按照超时时间有序地被执行 需求分析&#xff1a; 1.数据结构的选择&#xff1a;存储定时任务 2.驱动方式&#xff1a;如何选择一个任务并执…

CSS,HTML,JS 以及Vue前端面试题八股文总结【看完你就变高手】

■ 符号说明 &#x1f498; 主题 &#x1f31f; 常见重要 &#x1f31b; 需要有印象的 &#x1f195; v3新特性 ■ 杂谈 &#x1f31b; SEO优化 合理的title、description、keywords&#xff1a;搜索对着三项的权重逐个减小&#xff0c;title值强调重点即可&#xff1b;descrip…

东软的第三个研发基地,为什么选择了武汉?

继沈阳、大连之后&#xff0c;东软集团在国内打造的第三个研发基地——武汉东软软件园&#xff0c;于2024年5月25日正式开园。 “占地面积158亩、建筑面积14万余平方米的武汉东软软件园&#xff0c;从开工到竣工仅仅用了18个月的时间。这样的建设速度&#xff0c;充分体现了武汉…