某农业学校 算法设计与分析-第7次实验综合

news2024/11/17 17:51:02
  1. 寻找数组中的第k小元素

    【问题描述】给定一个长度为n的整数数组nums和整数k,输出数组中的第k小元素。要求不能对数组排序,使用分治的思想求解。

    【输入形式】输入的第1行中有1个数字n,表示数组的长度;第2行中有n个数字,表示数组的元素;第3行中有1个数字k。

    【输出形式】输出1行中有1个数字,表示数组中的第k小元素。
    【样例输入】

    6

    3 2 1 4 6 5

    2
    【样例输出】

    2
    【说明】
    1<=k<=n<=10^4

    10^-5<=nums[i]<=10^5

#include<bits/stdc++.h>
using namespace std;
int n,num[10010],k;

int findmid(int l,int r)
{
	int i,numm=0;
	for(i=l;i+4<=r;i+=5,numm++)
	{
		sort(num+l,num+l+5);
		swap(num[l+numm],num[i+2]);
	} 
	if(i<=r)
	{
		sort(num+i,num+r+1);
		swap(num[l+numm],num[i+(r-i+1)/2]);
		numm++;
	}
	if(numm==1) return num[l];
	else return findmid(l,l+numm-1);
}

int partion(int l,int r,int p)
{
	swap(num[p],num[l]);
	int i=l,j=r,post=num[i];
	while(i<j)
	{
		while(i<j && num[j]>=post) j--;
		if(i<j) num[i]=num[j];
		while(i<j && num[i]<=post) i++;
		if(i<j) num[j]=num[i];
	}
	num[i]=post;
	return i;
}

int find(int l,int r,int k)
{
	int mid=findmid(l,r);
	int p=partion(l,r,l);
	int len=p-l+1;
	if(len==k) return num[p];
	else if(len>k) return find(l,p-1,k);
	else return find(p+1,r,k-len);
}

int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>num[i];
		//cout << num[i]<<" ";
	}
	cin>>k;
	int ans=find(0,n-1,k);
	cout << ans;
	return 0;
 } 

2.文件压缩

【问题描述】给定一个文件,文件由n个字符组成,但他们出现的频度不相同。要求对该文件中的字符集构造哈夫曼树,并计算编码后的文件长度。
【输入形式】

输入的第1行有1个数字n,表示文件中总的字符个数。接下来1行中有n个数字,分别表示n个字符出现的频度。
【输出形式】

输出1行包含1个数字,表示使用哈夫曼编码后该文件的长度。
【样例输入】

5

20 7 10 4 18
【样例输出】

129
【样例说明】

使用哈夫曼编码后,各字符的编码长度分别为2 3 2 3 2,文件长度为2*20+3*7+2*10+3*4+2*18=129

#include<bits/stdc++.h>
using namespace std;
int n;
typedef struct huffman
{
	int weight,len,parent,lc,rc;
}huff;
huff tree[110];
void hfm()
{
	int i,j,p1,p2,s1,s2;
	for(i=0;i<2*n-1;i++)
	{
		tree[i].parent=-1;
		tree[i].lc=-1;
		tree[i].rc=-1;
		tree[i].weight=0;
	}
	for(i=0;i<n;i++)
	{
		int temp;
		cin>>temp;
		tree[i].weight=temp;
	}
	for(i=n;i<2*n-1;i++)
	{
		p1=-1;p2=-1;s1=1000;s2=1000;
		for(j=0;j<i;j++)
		{
			if(tree[j].parent==-1)
			{
				if(tree[j].weight<s1)
				{
					s2=s1;
					s1=tree[j].weight;
					p2=p1;
					p1=j;
				}
				else if(tree[j].weight<s2)
				{
					s2=tree[j].weight;
					p2=j;
				}
			}
		}
		tree[p1].parent=i;
		tree[p2].parent=i;
		tree[i].lc=p1;
		tree[i].rc=p2;
		tree[i].weight=tree[p1].weight+tree[p2].weight;
	}
	int all=0,len;
	huff s;
	for(i=0;i<n;i++)
	{
		len=0;
		s=tree[i];
		while(s.parent!=-1)
		{
			s=tree[s.parent];
			len++;
		}
		tree[i].len=len;
		all+=tree[i].weight*tree[i].len;
	}
	cout << all;
}

int main()
{
	cin>>n;
	hfm();
	return 0;
}

3.切分数组

【问题描述】给定一个整数数组 nums ,将 nums 切割成若干个非空子数组,使得每个子数组最左边的数和最右边的数的最大公约数大于 1 。请求出最少可以切成多少个子数组。

【输入形式】

输入数据有两行;

第一行是数组元素个数;

第二行是数组元素;
【输出形式】

输出数据有一行,是最少子数组个数;
【样例输入】

6

2 3 3 2 3 3

【样例输出】

2
【样例说明】最优切割为 [2,3,3,2] 和 [3,3] 。第一个子数组头尾数字的最大公约数为 2 ,第二个子数组头尾数字的最大公约数为 3 。

#include<bits/stdc++.h>
using namespace std;
int n,a[1010],b[1010],ans;
map<int,int> mp;

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		mp[a[i]]++;
		if(mp[a[i]]==1)
		{
			ans++;
		}
	}
	cout << ans;
	return 0;
}

4.集合总和

【问题描述】给定一个n个整数的集合X={x1,x2,...xn}(X中可能包含重复元素)和整数y,找出和等于y的X的子集Y。例如说,如果X={10,30,20,60,40,50},和y=60,则有4种不同的解,他们分别是{10,20,30},{10,50}{20,40},{60}。
【输入形式】输入的第1行包含两个整数n和y,分别表示集合X的长度和目标整数y。接下来1行包含n个整数(整数之间以空格分割),表示X中的n个元素。
【输出形式】输出1行包含1个整数,表示不同的解决方案(不能包含重复的方案数)。
【样例输入】

6 60

10 30 20 60 40 50
【样例输出】

4

#include<bits/stdc++.h>
using namespace std;
int n,y,a[1010],ans;
map<int,int> mp;

bool cmp(int x,int y)
{
	if(x>y)
	return true;
	else
	return false;
}

void solve(int k,int summ)
{
	if(k>n) return ;
	if(summ==y)
	{
		ans++;
		return;
	}
	else
	{
		for(int j=k+1;j<=n;j++)
		{
			if(summ+a[j]<=y)
			{
				solve(j,summ+a[j]);
			}
		}
	}
	return ;
}

int main()
{
	cin>>n;
	cin>>y;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		mp[a[i]]++;
		//cout << a[i]<<" ";
	}
	
	sort(a+1,a+n+1,cmp);
	int flag=0;
	for(int i=1;i<=n;i++)
	{
		if(a[i]>y) continue;
		if(mp[a[i]]>=2) flag=1;
		solve(i,a[i]);
	}	
	if(flag==1)
	{
		cout << ans-2;
	}
	else
		cout << ans;
	return 0;
}

5.批处理作业调度问题

【问题描述】 给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tij(i=1,2,……,n;j=1,2)。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间,则所有作业在机器2上完成处理的时间和

称为该作业调度的完成时间和。

【输入形式】

输入数据有3行;

第一行是作业个数n;

第二行有n个数,是n个作业在机器1上需要的处理时间;

第三行有n个数,是n个作业在机器2上需要的处理时间;

【输出形式】

输出数据有2行;

第一行是三个作业的最佳调度顺序;

第二行是该作业调度的完成时间和;
【样例输入】

3

2 3 2

1 1 3

【样例输出】

1 3 2

18

#include<bits/stdc++.h>
using namespace std;
#define N 100
int n; 
int f1=0,f2[N]={0},f=0,a[N][N],best[N],x[N];
int bestf=1e8;

int backpack(int t,int n)
{
    if(t>n)
	{
        for(int i=1;i<=n;i++)
		{
            best[i]=x[i];
        }
        bestf=f;
    }
    for(int i=t;i<=n;i++)
	{
        f1+=a[1][x[i]];
        f2[t] = ((f2[t-1]>f1)?f2[t-1]:f1)+a[2][x[i]];
        f+=f2[t];
        if(f<bestf)
		{
            swap(x[i],x[t]);
            backpack(t+1,n);
            swap(x[t],x[i]);
        }
        f1-=a[1][x[i]];
        f-=f2[t];
    }
}


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

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

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

相关文章

Qt+C++ TCP发送接收信息客户端与服务端窗体

程序示例精选 QtC TCP发送接收信息客户端与服务端窗体 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC TCP发送接收信息客户端与服务端窗体>>编写代码&#xff0c;代码整洁&am…

Linux常用基本指令详解

各位看客在看本期博客之前请放轻松心态&#xff0c;以免内容过长造成不适~ 目录 1. ls指令 1.1 ls指令的作用 1.2 ls常用的指令选项 2. pwd指令 3. cd指令 3.1 cd .. 3.2 cd 文件路径 3.3 cd ~ 3.4 cd - 4.热键Tab 4.1 使用Tab键进行命令的自动补齐 4.2 使用Tab键进行查看…

driftingblues4靶机(zbarimg二维码破解)

环境准备 靶机链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;qyha 虚拟机网络链接模式&#xff1a;桥接模式 攻击机系统&#xff1a;kali linux 2021.1 信息收集 1.arp-scan -l 探测目标靶机 2.nmap -p- -A -T4 192.168.1.107 扫描靶机开放端口和相应服务 3.…

【财务】FMS财务管理系统---付款管理

前一篇介绍了财务应付管理中的结算明细报表、结算单以及税票管理几个部分&#xff0c;本篇将分享下财务付款相关的内容。 付款最终是要汇款或现金支付给供货商或合作商家&#xff0c;公司的现金流就会减少&#xff0c;所以是不是所有的付款申请都要付&#xff1f;什么时间付出才…

一体式无线阀控超声水表在西北某市大用户用水计量收费管理项目应用案例

多年来&#xff0c;西北某市的工业园区供水公司对工业企业用户的用水收费一直采取业务员手动抄表、上门收费的方式。不仅效率低、浪费人力资源&#xff0c;而且供水公司很难掌握地区用水情况&#xff0c;不便于统一调度和管理。 为此&#xff0c;该工业园区安装了平升电子一体…

【微信小程序项目的基本组成结构】

项目的基本组成结构 ├── app.js # 小程序的逻辑文件 ├── app.json # 小程序的配置文件 ├── app.wxss # 全局公共样式文件 ├── pages # 存放小程序的各个页面 │ ├── index # index页面 │ │ ├── index.js # 页面逻辑 │ │ ├── index.wxml # 页面结构 │…

数据安全领导者和引路人的“实至名归” |美创2022年终盘点

走过2022&#xff0c;结束三年抗疫 无惧数据安全道路的风雨 美创人“毅”起前行 诠释数据安全领导者和引路人 真正做到“实至名归” 2022年&#xff0c;美创科技完成股改 正式更名为⇲ 2022年&#xff0c;数据安全领导力广受第三方认可 数据安全主要服务供应商 专业型安全…

踩坑记录2——RK3588跑通YOLO v5+DeepSORT

上篇说到RK3588编译OpenCV, 这篇记录一下跑通YOLO v5DeepSORT的愉(chi)快(shi)历程. 1. 保证编译OpenCV时关联了ffmpeg 如果本身缺少ffmpeg而编译了没有ffmpeg版本的OpenCV, 则视频无法读取. 解决方案参照CSDN, 首先安装ffmpeg: sudo apt install -y ffmpeg之后安装一堆dev:…

嵌入式初学者的2022年度总结

目录 学习过程 人工智能 嵌入式 51单片机 STM32 MicroPython Arduino 其他 未来计划 RT-Thread LIUNX 其他 总结 学习过程 今年二月份才开始写博客&#xff0c;到现在一共写了131篇文章&#xff0c;其中包含了Python&#xff0c;Mysql&#xff0c;51单片机&#…

HTML5 音视频

文章目录HTML5 音视频video元素简介简单使用多种格式的视频自定义视频audio元素简介简单使用设置网页背景音乐多种格式的音频自定义音频HTML5 音视频 video元素 简介 语法 <video>你的浏览器不支持video元素&#xff0c;请升级到最新版本 </video>说明 如果浏…

spring cloud、gradle、父子项目、微服务框架搭建---引入MyBatis-Plus(四)

总目录 https://preparedata.blog.csdn.net/article/details/120062997 文章目录总目录一、引入依赖二、配置mybatis-plus1.配置数据源2.配置mybatis-plus三、服务启动类配置MapperScan四、新建实体五、新建Mapper接口六、新建Mapper接口的Mapper.xml七、新建接口八、新建接口…

智能优化算法——正余弦优化算法(SCA)及其改进策略

正余弦优化算法&#xff08;SCA&#xff09;及其改进策略一、基本介绍1. 背景2. 算法简介二、基本的SCA算法1. 算法介绍2. 算法步骤三、算法分析1. 正余弦分布2. 算法实验结果3. 算法优缺点四、SCA改进策略1. 参数的改进2. 应用权重更新机制3. 基于反向学习的改进五、引用与代码…

Linux操作系统之进程间通信—信号量

文章目录一、信号量的定义&#xff1f;二、信号量的使用三、ipcs的使用一、信号量的定义&#xff1f; 信号量是一个特殊的变量&#xff0c;一般取正数值。它的值代表允许访问的资源数目&#xff0c;获取资源时&#xff0c;需要对信号的值进行原子减一&#xff0c;该操作被称为…

计算方阵的迹(主对角线上各元素之和)numpy.trace()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 计算方阵的迹&#xff08;主对角线上各元素之和&#xff09; numpy.trace() [太阳]选择题 以下关于python代码表述正确的一项是&#xff1f; import numpy as np A np.array([[1,2,3],[4,5…

ArcGIS基础实验操作100例--实验14设置字段别名

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验14 设置字段别名 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

CSS知识点精学2-盒子模型

CSS第三特性&#xff1a;优先级 &#xff08;优先级是三大特性中最复杂且重要的&#xff0c;前两大特性分别是继承性和层叠性&#xff0c;已经在CSS知识点精学1里面讲了&#xff09; 优先级 特性&#xff1a;不同选择器具有不同的优先级&#xff0c;优先级高的选择器样式会覆…

C++ 函数模板、具体化模板的分文件书写

函数模板分为普通函数模板和具体化函数模板 普通函数模板&#xff1a;函数模板只是函数的描述符&#xff0c;没有实体&#xff0c;创建函数模板的代码整体放在头文件中&#xff1b; 具体化函数模板&#xff1a;具体化函数模板有实体&#xff0c;编译时和普通函数一样&#xf…

Linux多线程互斥量与原理剖析

这里我们简要介绍了线程间互斥相关的概念&#xff0c;并对加锁的一种原理进行了剖析&#xff0c;本人目前理解尚浅&#xff0c;若文中有表述不当的地方还望理解并指正&#xff0c;谢谢大家&#xff01; 文章目录一&#xff1a;线程间互斥相关背景概念二&#xff1a;互斥量mutex…

摄影测量学:期末考试重点总结

本文参考《摄影测量学》 (王佩军&#xff0c;徐亚明 编著)&#xff1b; 01 不同阶段的摄影测量的对比&#xff0c;课本表1-1 &#xff08;原始资料、投影方式、仪器记不住&#xff0c;那名字总该记住吧&#xff1f;模拟摄影测量、解析摄影测量、数字摄影测量&#xff09; 02 量…

Python中的所有运算符以及运算符的优先级

文章目录前言一、算术运算符二、赋值运算符三、比较运算符四、逻辑运算符五、位运算符六、运算符的优先级案例实战总结前言 运算符是一些人为定义的特殊符号&#xff0c;比如我们生活当中最常见的 、-、、&#xff0c;它们主要用于数学计算、比较大小和逻辑运算等等。那这些运…