算法课习题汇总(3)

news2024/10/1 23:46:42

循环日程表

设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。

例如4个人进行比赛:
在这里插入图片描述

思路:

  1. 把表格分为四个部分,每个部分的起点分别为红色的圆圈
  2. 左上角的坐标为(l,r),表格长度为len/2,表格内的数据为v
  3. 右上角的坐标为(l,r+len/2),表格长度为len/2,表格内的数据为v+len/2
  4. 左下角的坐标为(l+len/2,r),表格长度为len/2,表格内的数据为v+len/2
  5. 右下角的坐标为(l+len/2,r+len/2),表格长度为len/2,表格内的数据为v
  6. 递归的结束条件为l==r,将数组进行赋值即可返回
    在这里插入图片描述
#include<iostream>
using namespace std;

int a[100][100];
void f(int l, int r, int len, int v)
{
	if (len == 1)
	{
		a[l][r] = v;
		return;
	}
	f(l, r, len / 2, v);
	f(l, r + len / 2, len / 2, v+len/2);
	f(l + len / 2, r, len / 2, v+len/2);
	f(l + len / 2, r + len / 2, len / 2, v);
}

int main()
{
	int n;
	cin >> n;
	f(1, 1, n, 1);
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
	return 0;
}

在这里插入图片描述

矩阵连乘问题

给定n个矩阵{A1, A2, A3, …, An},其中矩阵Ai的维度为Pi-1 x Pi(i=1, 2, …, n),且满足Ai的列数等于Ai+1的行数(即Pi = Pi+1,i=1, 2, …, n-1),要求计算这n个矩阵的连乘积A1A2…An,并寻找一种计算次序,使得所需的标量乘法次数最少。

方法一:递归

#include<iostream>
using namespace std;

int p[100], m[100][100];

int f(int i, int j)
{
	if (m[i][j])
		return m[i][j];//当该数不为0时则表示该数已经计算过了,直接跳过即可
	if (i == j)
		return 0;
	int min = 1000000;
	for (int k = i; k < j; k++)//Ai.....Ak||Ak+1....Aj
	{
		int tmp = f(i, k) + f(k + 1, j) + p[i - 1] * p[k] * p[j];
		if (tmp < min)
			min = tmp;
	}
	return m[i][j]=min;
}

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i <= n; i++)
		cin >> p[i];
	cout << f(1, n) << endl;
	return 0;
}

在这里插入图片描述

方法二:动态规划

int m[100][100], p[100], s[100][100];

void f(int l, int r)
{
	if (l == r)
	{
		cout << "A" << r;
		return;
	}
	int k = s[l][r];
	cout << "(";
	f(l, k);
	f(k + 1, r);
	cout << ")";
}

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i <= n; i++)
		cin >> p[i];
	for (int r = 2; r <= n; r++)
	{
		//Ai....Ak||Ak+1....An  n-i+1=r
		for (int i = 1; i <= n - r + 1; i++)
		{
			int j = r + i - 1;
			m[i][j] = 1000000;
			for (int k = i; k < j; k++)
			{
				int tmp = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];
				if (tmp < m[i][j])
				{
					m[i][j] = tmp;
					s[i][j] = k;
				}
			}
		}
	}
	f(1, n);
	cout << endl;
	cout << m[1][n] << endl;
	return 0;
}

在这里插入图片描述

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

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

相关文章

数据结构-4.1.特殊矩阵的压缩存储

一.一维数组的存储结构&#xff1a; 1.知道一维数组的起始地址&#xff0c;就可以求出任意下标对应的元素所在的地址&#xff1b; 2.注&#xff1a;如果数组下标从1开始&#xff0c;上述公式的i就要改为i-1&#xff1b; 3.数组里的元素类型相同&#xff0c;因此所占空间也相同…

九、设备的分配与回收

1.设备分配时应考虑的因素 ①设备的固有属性 设备的固有属性可分为三种:独占设备、共享设备、虚拟设备。 独占设备 一个时段只能分配给一个进程(如打印机) 共享设备 可同时分配给多个进程使用(如磁盘)&#xff0c;各进程往往是宏观上同时共享使用设备而微观上交替使用。 …

【Orange Pi 5嵌入式应用编程】-用户空间UART通信

用户空间UART通信 文章目录 用户空间UART通信1、理解UART通信1.1 什么是UART通信?1.2 UART如何工作?1.3 UART传输步骤1.4 UART的优缺点2、嵌入式Linux中的UART3、Orange Pi 5中UART完整示例3.1 UART操作函数定义3.2 UART定义函数实现1、理解UART通信 UART是Universal Asynch…

松山湖全球首秀:传祺华为概念车发布

9月24日晚&#xff0c;传祺与华为联合举办的创「新」计划成果分享会暨全新概念车品鉴会&#xff0c;在华为东莞松山湖基地圆满落幕。 作为本次活动的焦点&#xff0c;传祺与华为双方联手打造的首款概念车「1 Concept」&#xff0c;也在会场正式登场亮相&#xff0c;这也标志着传…

动态分配内存

目录 前言 一.malloc,free函数 1.malloc,free函数原型 2.使用方法 3.具体实例 4.注意事项 二.calloc函数 1.calloc函数原型 2.主要特点 3.使用案例 三.realloc函数 1.realloc函数原型 2.使用案例 3.注意事项 前言 动态内存是指在程序运行时&#xff0c;按需分配和…

Java网络通信—TCP

1.客户端 2.服务端

OpenGL ES 纹理(7)

OpenGL ES 纹理(7) 简述 通过前面几章的学习&#xff0c;我们已经可以绘制渲染我们想要的逻辑图形了&#xff0c;但是如果我们想要渲染一张本地图片&#xff0c;这就需要纹理了。 纹理其实是一个可以用于采样的数据集&#xff0c;比较典型的就是图片了&#xff0c;我们知道我…

【ios】---swift开发从入门到放弃

swift开发从入门到放弃 环境swift入门变量与常量类型安全和类型推断print函数字符串整数双精度布尔运算符数组集合set字典区间元祖可选类型循环语句条件语句switch语句函数枚举类型闭包数组方法结构体 环境 1.在App Store下载Xcode 2.新建项目&#xff08;可以先使用这个&…

AKShare-股票数据-相关股票

AKShare-股票数据-相关股票 数据科学实战 数据科学实战 2024年10月01日 13:53 作者寄语 本次更新股票数据-相关股票接口。主要修复该接口&#xff0c;目前通过该接口可以获取 时间&#xff0c;股票代码&#xff0c;相关股票代码&#xff0c;涨跌幅 等字段的数据。 欢迎加入专…

Java之方法的使用

修饰符 返回值 方法名称&#xff08;形式参数&#xff09;{ } 当无参数的时候形式参数中什么都不写。 列如求两个数相加 修饰符可有可无。 方法重载&#xff1a; 1.方法名相同 2.参数列表不同 3。返回值不影响重载

STL--string类

我们从这篇文章之后就正式开始学习STL的string&#xff0c;字面看起来是不是像C语言里面的字符串之类的处理方法&#xff0c;是的&#xff0c;C里面也是对字符串的一些处理函数&#xff0c;但是C有很多这样的函数&#xff0c;给大家推荐一个网站 &#xff0c;这个网站是C的官网…

Python | Leetcode Python题解之第448题找到所有数组中消失的数字

题目&#xff1a; 题解&#xff1a; class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:n len(nums)for num in nums:x (num - 1) % nnums[x] nret [i 1 for i, num in enumerate(nums) if num < n]return ret

Verilog基础:$display系统函数和C语言中的库函数printf的区别

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 Verilog中的$display系统函数和C语言中的库函数printf都是用于输出信息&#xff0c;但它们的用法存在一定差别&#xff0c;本文将简要描述。 $display系统函数的B…

Javaweb商城项目

smbms 视频教程&#xff1a;javaweb-30&#xff1a;smbms项目搭建_哔哩哔哩_bilibili 一.项目分析 1.项目结构 2.数据库表 CREATE DATABASE smbms;USE smbms;DROP TABLE IF EXISTS smbms_address;CREATE TABLE smbms_address (id bigint(20) NOT NULL AUTO_INCREMENT CO…

计算机毕业设计 家校互联管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

2024年录屏软件排行榜:班迪录屏等四款软件实测!

不论是学习、娱乐还是工作&#xff0c;都有可能需要用到屏幕录制功能。在这篇文章中&#xff0c;我们将从不同的使用场景出发&#xff0c;为大家推荐几款实用的录屏工具——福昕录屏大师、转转大师录屏、爱拍录屏以及班迪录屏。 Foxit REC 直达链接&#xff08;复制到浏览器打…

Flexible组件的用法

文章目录 1. 概念介绍2. 使用方法3. 示例代码我们在上一章回中介绍了扩展内容相关的知识,本章回中将介绍Flexible组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在前面章回中介绍了扩展列表相关的内容,当页面中其它组件和扩展列表一起使用时,扩展列表有可能会…

SpringBoot——基础配置

但是还需要删除pom.xml中的标签——模板的文件也同样操作 banner的选项——关闭 控制台 日志 banner图片的位置——还会分辨颜色 在 Java 的日志框架&#xff08;如 Logback、Log4j2 等&#xff09;中&#xff0c;logging.level.root主要用于设置根日志记录器的日志级别…

【Redis】如何在 Ubuntu 上安装 Redis 5

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容主要介绍如何在 Ubuntu 上安装 Redis5 一些碎碎念&#xff1a; 本来这期内容介绍如何在 Centos 安装 Redis …

常用的Java安全框架

Spring Security&#xff1a; 就像Java安全领域的“瑞士军刀”&#xff0c;功能全面且强大。 支持认证、授权、加密、会话管理等安全功能。 与Spring框架无缝集成&#xff0c;使用起来特别方便。 社区活跃&#xff0c;文档丰富&#xff0c;遇到问题容易找到解决方案。 Apach…