C++题目打卡2.18

news2024/10/4 14:55:50

从今天开始我们又将讲4天题目。

题目列表

        1.分配T4

                2.组合T5


#分配T4

这里很明显是(200 + 110) - 330的差值最小。

我们先想到了一个想法就是输入时哪个堆大,加那个。

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n, ans1 = 0, ans2 = 0;
    cin >> n;
    for(int i = 0, a; i < n; i++)
        cin >> a, (ans1 >= ans2 ? ans2 += a : ans1 += a);
    cout << max(ans1, ans2) << ' ' << min(ans1, ans2);
    return 0;
}

就30分。

我们再来看一下正解:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin >> n;
    int a[n];
    for(int i = 0; i < n ;i++) cin >> a[i];
    int m = 1 << n; // 2ⁿ个位串
    int dis = 1e4 + 1, ans1 = 1e4 + 1, ans2 = 1e4 + 1;
    for(int plan = 0; plan < m; plan++){
    	int sum1 = 0, sum2 = 0;
    	for(int i = 0; i < n; i++)
    		if(plan & (1 << i)) sum1 += a[i]; // 看plan的第i为是否是1, 如果是加到第一个数组
    		else sum2 += a[i]; // 看plan的第i为是否是0, 如果是加到第一个数组
    	if(abs(sum1 - sum2) < dis){ // 更新成差值最小的
    		ans1 = sum1;
    		ans2 = sum2;
    		dis = abs(sum1 - sum2);
    	}
    }
    cout << max(ans1, ans2) << ' ' << min(ans1, ans2);
    return 0;
}

我们来看一下你不加第一的堆,肯定就要加第二个,那n个,就有2ⁿ 个对吧(长度为n的位串个数)。

画的可能不是那么好,但能看懂就行。

我们来看一下3个的位串个数是:

1. 1 1 1                5. 0 1 1

2. 1 1 0                6. 0 1 0

3. 1 0 1                7. 0 0 1

4. 1 0 0                8. 0 0 0

懂了吗


 #组合T5

 

样例看明白了吧。

#include <bits/stdc++.h>
using namespace std;
int a[10][2], b[10][2], ans = 0, nn, k;
void dfs(int n){
    if(n == 0){
        for(int i = 0; i < nn; i++) a[i][1] = 0;
        for(int i = 0; i < nn; i++) b[i][1] = 0;
        ans++;
        return ;
    }
    for(int i = 0; i < nn; i++)
        for(int j = 0; j < nn; j++)
            if(a[i][1] != 1 && b[j][1] != 1){
                if(a[i][0] >= b[j][1]){
                    a[i][1] = 1, b[i][1] = 1;
                    dfs(--n);
                }else if(k != 0)
                    k--, dfs(--n), a[i][1] = 1, b[i][1] = 1;
            }
}
int main(){
    cin >> nn >> k;
    for(int i = 0; i < nn; i++) cin >> a[i][0], a[i][1] = 0;
    for(int i = 0; i < nn; i++) cin >> b[i][0], b[i][1] = 0;
    dfs(nn);
    cout << ans;
    return 0;
}

看一下这样只能的50分。

我们再来看一下满分的代码很简单。

#include<bits/stdc++.h>
#define _for(i, a, b) for(int i = (a); i < (int)(b); i++)
using namespace std;

int main(){
    int n, k; cin>>n>>k;
    vector<int> A(n), B(n), P(n);        //A记录男生身高,B记录女生身高,P用于枚举女生次序的排列,A[i]和B[P[i]]组合 
    _for(i, 0, n) cin>>A[i];
    _for(i, 0, n) cin>>B[i];
    _for(i, 0, n) P[i] = i;                //初始排列,012...n-1, 即A[0]和B[0]组合,A[1]和B[1]组合,…… 
    int ans = 0;
    do{
        int cnt = 0;                    //cnt记录当前方案有多少对组合是男生比女生更矮 
        _for(i, 0, n)
            if(A[i] < B[P[i]]) cnt++;    //如果第i位男生A[i] 比 当前方案中第i位女生 B[P[i]] 矮,则cnt增加 
        ans += (cnt <= k);                //如果 男生比女生更矮 的数量超过k,则该方案不合理,反之该方案合理,最终答案+1 
    } while(next_permutation(P.begin(), P.end()));    //枚举下一个女生的排列 
    cout<<ans;
    return 0;
}

最主要是next_permutation该怎么用。

有人可能不知道这个东西,我们先来试验一下。

#include <bits/stdc++.h>
using namespace std;
int main(){
    string s = "1234";
    do{
        cout << s <<'\n';
    }while(next_permutation(s.begin(), s.end()));
    return 0;
}

会输出:

这样一串东西,这就是1234的所有排列,当然string 也可以换成vector | int。

next_permutation还有一个好处就是,如果有重复的东西不算重复的排列。

 

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

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

相关文章

基于SSM的疫情期间学生信息管理平台的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的疫情期间学生信息管理平台的设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

Compose 1.6 发布:性能大升级、拖放新功能、文本新变化...

翻译自&#xff1a; https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html 基于 1 月 24 号的 Compose 发行计划&#xff0c;我们正式推出了 Jetpack Compose 1.6 版本。 作为 Android 平台备受推崇的原生 UI 工具包&…

vm centos7 docker 安装 mysql 5.7.28(2024-02-18)

centos系统版本 [rootlocalhost mysql5.7]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) docker版本 拉取指定版本镜像 docker pull mysql:5.7.28 docker images 创建挂载目录&#xff08;数据存储在centos的磁盘上&#xff09; mkdir -p /app/softwa…

【Python机器学习】详解Python机器学习进行时间序列预测

&#x1f517; 运行环境&#xff1a;Python &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f497; 大家…

GWO优化kmeans

GWO&#xff08;灰狼优化器&#xff09;是一种群体智能优化算法&#xff0c;它模拟了灰狼的社会结构和狩猎行为。GWO算法通过模拟灰狼的等级制度、狩猎策略和搜索机制来寻找问题的最优解。而K-means是一种经典的聚类算法&#xff0c;用于将数据点划分为K个簇。将GWO优化算法应用…

LeetCode.589. N 叉树的前序遍历

题目 589. N 叉树的前序遍历 分析 我们之前有做过LeetCode的 144. 二叉树的前序遍历&#xff0c;其实对于 N 插树来说和二叉树的思路是一模一样的。 二叉树的前序遍历是【根 左 右】 N叉树的前序遍历顺序是【根 孩子】&#xff0c;你可以把二叉树的【根 左 右】想象成【根 孩…

数据结构之线性表插入与删除运算

线性表 线性表的定义 线性表&#xff0c;或称表&#xff0c;是一种非常灵便的结构&#xff0c;可以根据需要改变表的长度&#xff0c;也可以在表中任何位置对元素进行访问、插入或删除等操作。另外&#xff0c;还可以将多个表连接成一个表&#xff0c;或把一个表拆分成多个表…

网站常见的攻击类型有什么,如何针对性防护

在互联网时代&#xff0c;几乎每个网站都存在着潜在的安全威胁。这些威胁可能来自人为失误&#xff0c;也可能源自网络犯罪团伙所发起的复杂攻击。无论攻击的本质如何&#xff0c;网络攻击者的主要动机通常是谋求经济利益。这意味着不管是什么网站类型潜在的威胁一直都存在。 在…

使用傅里叶实现100倍的压缩效果(附Python源码)

傅里叶变换&#xff08;Fourier Transform&#xff09;是一种将一个函数&#xff08;在时间或空间域&#xff09;转换为另一个函数&#xff08;在频率域&#xff09;的数学变换方法。它在信号处理、图像处理、通信等领域有广泛应用。 实现过程 将傅里叶系数核心的1%保留&…

挑战杯 地铁大数据客流分析系统 设计与实现

文章目录 1 前言1.1 实现目的 2 数据集2.2 数据集概况2.3 数据字段 3 实现效果3.1 地铁数据整体概况3.2 平均指标3.3 地铁2018年9月开通运营的线路3.4 客流量相关统计3.4.1 线路客流量排行3.4.2 站点客流量排行3.4.3 入站客流排行3.4.4 整体客流随时间变化趋势3.4.5 不同线路客…

【Redis】理论进阶篇------Redis的持久化

一、前言 前面学习了Redis的相关的十大数据类型以及用SpringBoot集成我们的Redis的工具代码的书写。从这篇文章开始&#xff0c;就会从Redis相关的一些理论&#xff08;也是面试和工作的热点知识&#xff09;如&#xff1a;Redis的持久化、Redis的订阅发布模型、Redis集群环境搭…

RF框架自定义测试库开发

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Audition 2023(Au)下载安装及详细安装教程

Audition(Au)的介绍 Adobe Audition&#xff08;简称Au&#xff0c;原名Cool Edit Pro&#xff09;是由Adobe公司开发的一个专业音频编辑和混合环境。Audition专为在照相室、广播设备和后期制作设备方面工作的音频和视频专业人员设计&#xff0c;可提供先进的音频混合、编辑、控…

《汇编语言》- 读书笔记 - 第10章-CALL 和 RET 指令

《汇编语言》- 读书笔记 - 第10章-CALL 和 RET 指令 10.1 ret 和 retf检测点 10.1 10.2 call 指令10.3 依据位移进行转移的 call 指令检测点 10.2 10.4 转移的目的地址在指令中的 call 指令检测点 10.3 10.5 转移地址在寄存器中的 call 指令10.6 转移地址在内存中的 call 指令检…

LabVIEW高速信号测量与存储

LabVIEW高速信号测量与存储 介绍了LabVIEW开发的高速信号测量与存储系统&#xff0c;解决实验研究中信号捕获的速度和准确性问题。通过高效的数据处理和存储解决方案&#xff0c;本系统为用户提供了一种快速、可靠的信号测量方法。 项目背景 在科学研究和工业应用中&#xf…

session和cookie理解

目录 1、理解无状态 2、Session和Cookie理论 3、使用session存储数据 前言&#xff0c;理解session与cookie对于我们做web测试、接口测试、性能测试都是非常有帮助的。 cookie是一些数据信息&#xff0c;存储在浏览器端。 session是存储于服务器端的特殊对象&#xff0c;服务器…

Java并发基础:CompletableFuture全面解析

内容概要 CompletableFuture类使得并发任务的处理变得简单而高效&#xff0c;通过简洁的API&#xff0c;开发者能轻松创建、组合和链式调用异步操作&#xff0c;无需关心底层线程管理&#xff0c;这不仅提升了程序的响应速度&#xff0c;还优化了资源利用率&#xff0c;让复杂…

【Redis】 如何保证数据不丢失?

目录 1.Redis 持久化 1.1 RDB 持久化 1.2 AOF 持久化 1.3 混合持久化 2.Redis 集群 2.1 主从同步 2.2 哨兵模式 2.3 Redis Cluster 小结 1.Redis 持久化 持久化是指将数据从内存中存储到持久化存储介质中&#xff08;如硬盘&#xff09;的过程&#xff0c;以便在程序重…

C++之Easyx——图形库的基本准备工作

什么是Easyx&#xff1f; EasyX Graphics Library 是针对 Visual C 的免费绘图库&#xff0c;支持 VC6.0 ~ VC2022&#xff0c;简单易用&#xff0c;学习成本极低&#xff0c;应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中。 它比Red PandaDev C上的图形库功能要强…

好用的UI自动化测试平台推荐

随着软件行业的不断发展&#xff0c;建立一个完善的自动化测试体系变得至关重要。目前&#xff0c;自动化测试主要涵盖接口自动化测试和UI自动化测试两个主要领域。就目前而言&#xff0c;企业在UI自动化测试方面的覆盖率仍然相对较低。 接口自动化测试可以模拟和执行应用程序…