C++题目打卡2.18

从今天开始我们又将讲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.mfbz.cn/a/393819.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Win11家庭版,鸿蒙DevEco 模拟器启动失败,成功解决了

本人电脑系统&#xff1a;Windows 11 家庭版 正常安装模拟器后&#xff0c;启动失败&#xff0c;查了各种方法&#xff0c;最终发现是电脑虚拟机未启动导致的。 官方给出的解决方法&#xff08;对我无效&#xff01;&#xff01;&#xff01;&#xff09;&#xff1a; 我的…

MySQL之select查询

华子目录 SQL简介SQL语句分类SQL语句的书写规范SQL注释单行注释多行注释 select语句简单的select语句select的算数运算select 要查询的信息 from 表名;查询表字段查询常量查询表达式查询函数 查询定义别名as安全等于<>去重distinct连接字段concat 模糊查询运算符比较运算…

Linux网络----防火墙

一、安全技术和防火墙 1、安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安…

代码随想录第33天|● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果

文章目录 1005.K次取反后最大化的数组和贪心思路&#xff1a;代码&#xff1a; 34. 加油站思路一&#xff1a;全局贪心代码&#xff1a; 思路二&#xff1a;代码&#xff1a; 135. 分发糖果思路&#xff1a;两边考虑代码&#xff1a; 1005.K次取反后最大化的数组和 贪心思路&am…

Stackoverflow(1)-根据RequestBody的内容来区分使用哪个资源

如果使用Spring&#xff0c;可以通过RequestBody将请求体的json转换为Java对象&#xff0c;但如果URI相同&#xff0c;而请求体的内容不同&#xff0c;应该怎么办&#xff1f;问题来源(stackoverflow)&#xff1a;Spring RequestBody without using a pojo?稍微研究了一下&…

手把手一起开发SV4E-I3C设备(三)

JEDEC DDR5 SPD Hub Devices例程 为进一步方便程序开发&#xff0c;使用vscode开发程序&#xff0c;IntrospectESP_23.3.0软件调用运行&#xff0c;如图所示&#xff0c;双击UTILITY区域的PythonModule&#xff0c;自动生成一个py文件&#xff0c;可以给该模块重命名。例如重命…

重学Java 16.面向对象.4.对象数组

一、对象数组 1.需求&#xff1a;定义一个长度为3的数组&#xff0c;存储3个person对象&#xff0c;遍历数组&#xff0c;将三个person对象中的属性值获取出来 public class Person {private String name;private int age;public Person(String name,int age) {this.name name…

Yii2项目使用composer异常记录

问题描述 在yii2项目中&#xff0c;使用require命令安装依赖时&#xff0c;出现如下错误提示 该提示意思是&#xff1a;composer运行时&#xff0c;执行了yiisoft/yii2-composer目录下的插件&#xff0c;但是该插件使用的API版本是1.0&#xff0c;但是当前的cmposer版本提供的…

单体工程结构

本文主要说明下单体项目的工程结构如何设计&#xff0c;目前业界存在两种主流的应用工程结构&#xff1a;一种是阿里推出的《Java开发手册》中推荐的&#xff0c;另外一种是基于DDD(领域驱动设计)推荐的。下面我们来看下两种工程结构是怎样的。 一、 基于阿里《Java开发手册》…

生成式 AI - Diffusion 模型的数学原理(3)

来自 论文《 Denoising Diffusion Probabilistic Model》&#xff08;DDPM&#xff09; 论文链接&#xff1a; https://arxiv.org/abs/2006.11239 Hung-yi Lee 课件整理 文章目录 一、图像生成模型本质上的共同目标二、最大似然估计三、和VAE的关联四、概率计算 一、图像生成模…

三维模型优化与可视化开发者服务

一站式服务开发者 1、极速流畅的浏览体验 无需安装插件&#xff0c;实现模型多端展示 最大支持100G模型&#xff0c;杜绝花、卡、闪 2、丰富易用的开发工具 无需掌握图形技术&#xff0c;实现模型轻量化和3D交互展示 提供丰富的SDK和API&#xff0c;简洁易用 老子云API 提供…

Java+SpringBoot:高校竞赛管理新篇章

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

添加环境变量

目录 一、前言二、目的三、添加环境变量的步骤四、检查环境变量是否配置成功 一、前言 在很多地方在下载完软件后都需要添加环境变量方可使用。这里以要在终端使用MySQL为例来说一下&#xff0c;在安装好MySQL8.0版本的前提下&#xff0c;如何添加环境变量。 二、目的 添加环…

力扣OJ题——旋转数组

题目&#xff1a;189.旋转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数 思路一&#xff1a; 1.每次挪动旋转1位&#xff08;用tmp将最后一位存起来&#xff0c;其余所有数据向后移&#xff0c;然后将tmp放在第一个位…

单源最短路径(Dijkstra)

前言 dijkstra&#xff1a;对于无负边的情况下可以达到O(nlogn)且很难被卡 最短路 - OI Wiki (oi-wiki.org) P3371 【模板】单源最短路径&#xff08;弱化版&#xff09; P3371 【模板】单源最短路径&#xff08;弱化版&#xff09; - 洛谷 | 计算机科学教育新生态 (luogu.com…

2.18学习总结

链式前向星的处理和建立 tarjan对割点和缩点的使用 拓扑排序 链式前向星&#xff1a; 预处理&#xff1a; struct edge{int from;int to;int next; }e[N]; int n,m,head[N],dfn[N],low[N],tot,color[N],num[N],out[N],s,instack[N],id; 处理&#xff1a; void add(int …

svg之全局组件,配合雪碧图解决vue2的svg优化问题

这里是vue2中的svg的完整解决方案的另一篇。 <template><svg :class"svgClass"><use :xlink:href"#${name}"></use></svg> </template><script>export default {name: icon,props: {name: {type: String,requi…

lv15 input子系统框架、外设驱动开发 5

一、input子系统基本框架 在我们日常的Linux系统中&#xff0c;存在大量的输入设备&#xff0c;例如按键、鼠标、键盘、触摸屏、摇杆等&#xff0c;他们本身就是字符设备&#xff0c;linux内核将这些字符设备的共同性抽象出来&#xff0c;简化驱动开发建立了一个input子系统。 …

关于Spring Boot应用系统避免因为日切(日期切换)导致请求结果变更的一种解决方案

一、前言 在系统开发过程中&#xff0c;有些业务功能面临日切&#xff08;日期切换&#xff09;问题&#xff0c;比如结息跑批问题&#xff0c;在当前工作日临近24点的时候触发结息&#xff0c;实际交易时间我们预期的是当前时间&#xff0c;但是由于业务执行耗时&#xff0c;…

【EI会议征稿通知】第五届城市工程与管理科学国际会议(ICUEMS 2024)

【Scopus稳定检索】第五届城市工程与管理科学国际会议&#xff08;ICUEMS 2024&#xff09; 2024 5th International Conference on Urban Engineering and Management Science 第五届城市工程与管理科学国际会议&#xff08;ICUEMS 2024&#xff09;将于2024年5月31日-6月2日…
最新文章