OJ_数组划分

题干

在这里插入图片描述

C++实现——复杂度极高的深度优先遍历(容易超时)

#include <iostream>
#include <vector>
using namespace std;//sa+sb = sum
//sb-sa = diffint sum = 0;
int diff = 0;void DFSFindMinDiff(vector<int> &arr,int pos,int sa) { //sa表示a集合的元素和if(pos == arr.size()) {return;}//arr[pos]不放入a集合DFSFindMinDiff(arr,pos+1,sa);//arr[pos]放入a集合int newdiff;//记录当前差值if(2*(sa+arr[pos]) - sum > 0) {//sa>sbnewdiff = 2*(sa+arr[pos]) - sum;} else {//sa<sbnewdiff = sum - 2*(sa+arr[pos]);}if(newdiff < diff) {diff = newdiff;}DFSFindMinDiff(arr,pos+1,sa+arr[pos]);
}int main() {vector<int> arr;int i;//EOF对应键盘的ctrl+cwhile(scanf("%d",&i) != EOF) {arr.push_back(i);}for(int i = 0; i<arr.size(); ++i) {sum+=arr[i];}diff = sum;//一开始,a集合一个元素也没有,全都在b集合中DFSFindMinDiff(arr,0,0);int sa = (sum-diff)/2;int sb = sa+diff;//sa更小printf("%d %d\n",sb,sa);return 0;
}

C++实现——优化策略(剪枝)

  • arr排序,从大到小
  • 先执行加入arr[pos],再执行不加入的
  • 一开始sa<sb,某个时刻sa>sb,就可以终止了
  • 当diff=1时,可以提前终止
  • 当arr[pos] > sum/2时,可以终止
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int sum = 0;//sa+sb = sum
int diff = 0;//sb-sa = diff
bool exitFlag = false;//用来记录是否提前退出
bool compare(int lhs,int rhs){return lhs>rhs;
}void DFSFindMinDiff(vector<int> &arr,int pos,int sa) { //sa表示a集合的元素和if(pos == arr.size() || exitFlag == true) {return;}//arr[pos]放入a集合int newdiff;//记录当前差值if(2*(sa+arr[pos]) - sum > 0) {//sa>sbnewdiff = 2*(sa+arr[pos]) - sum;} else {//sa<sbnewdiff = sum - 2*(sa+arr[pos]);}if(newdiff < diff) {diff = newdiff;if(diff == 0||diff==1||2 * arr[pos] > sum){//这三种情况,可提前终止exitFlag = true;}}if(2*(sa+arr[pos]) - sum < 0){DFSFindMinDiff(arr,pos+1,sa+arr[pos]);}//arr[pos]不放入a集合DFSFindMinDiff(arr,pos+1,sa);
}int main() {vector<int> arr;int i;//EOF对应键盘的ctrl+cwhile(scanf("%d",&i) != EOF) {arr.push_back(i);}for(int i = 0; i<arr.size(); ++i) {sum+=arr[i];}diff = sum;//一开始,a集合一个元素也没有,全都在b集合中sort(arr.begin(),arr.end(),compare);//先从大到小排序DFSFindMinDiff(arr,0,0);int sa = (sum-diff)/2;int sb = sa+diff;//sa更小printf("%d %d\n",sb,sa);return 0;
}

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

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

相关文章

【SCI论文】“学术丑闻揭露:当AI写作遭遇学术审稿,ChatGPT意外成为论文共作者!“

在最近的学术圈中出现了一篇令人哭笑不得的论文。这篇文章标题为“The three-dimensional porous mesh structure of Cu-base…”发表在《Surfaces and Interfaces》杂志上&#xff0c;竟然包含了ChatGPT的提示语&#xff0c;暴露出了审稿过程中可能的疏忽。 文章讨论了铜基金…

构建部署_Jenkins介绍与安装

构建部署_Jenkins介绍与安装 构建部署_Jenkins介绍与安装Jenkins介绍Jenkins安装 构建部署_Jenkins介绍与安装 Jenkins介绍 Jenkins是一个可扩展的持续集成引擎。 持续集成&#xff0c;就是通常所说的CI&#xff08;Continues Integration&#xff09;&#xff0c;可以说是现…

【PyTorch】基础学习:在Pycharm等IDE中打印或查看Pytorch版本信息

【PyTorch】基础学习&#xff1a;在Pycharm等IDE中打印或查看Pytorch版本信息 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1…

最新潮乎盲盒系统源码,附搭建教程

搭建方法 宝塔创建网站&#xff0c;上传后端程序到根目录&#xff0c;在.env修改数据库账号密码 上传数据库&#xff0c;伪静态thinkphp 运行目录public PHP扩展安装下面的 禁用函数先禁用下面那个&#xff0c;就可以了 前端是uniapp 后台admin 禁用函数putenv、 扩展fileinfo…

【日常记录】【JS】浏览器本身的取色器

文章目录 1、介绍2、打开拾色器并且取样3、代码中止拾色器4、参考连接 1、介绍 EyeDropper 接口表示一个拾色器工具的实例&#xff0c;用户可以打开并使用它从屏幕上选择颜色。 (他还是一个实验性的技术&#xff0c;存在兼容性问题&#xff09; EyeDropper MDN 介绍 2、打开拾…

Android FrameWork 学习路线

目录 前言 学习路线&#xff1a; 1.基础知识 2、AOSP 源码学习 3. AOSP 源码编译系统 4. Hal与硬件服务 5.基础组件 6. Binder 7. 系统启动过程分析 8. 应用层框架​编辑 9. 显示系统 10. Android 输入系统 11. 系统应用 前言 Android Framework 涉及的行业相当广…

热流道融合3D打印技术正在成为模具制造新利器

在模具领域中&#xff0c;3D打印技术与热流道技术联手&#xff0c;能迸发出更耀眼的光芒。两种技术虽然各有特点&#xff0c;但两者结合将形成互补作用&#xff0c;从而实现11&#xff1e;2”的跨越式提升。 将增材制造的灵活思维融入传统模具设计时&#xff0c;不仅能够突破传…

github登录时解决2FA问题

使用Edge浏览器下载插件 https://microsoftedge.microsoft.com/addons/detail/authenticator-2fa-client/ocglkepbibnalbgmbachknglpdipeoio 下载后弹框会显示是否添加&#xff0c;添加。如下&#xff1a; Chrome下 https://chrome.google.com/webstore/detail/authenticator…

力扣简单串题:转换成小写字母

char* toLowerCase(char* s) {if(sNULL){return NULL;}for(int x0;x<strlen(s);x){if(s[x]>A&&s[x]<Z){s[x]s[x]-Aa;}}return s; }

深度学习 精选笔记(11)深度学习计算相关:GPU、参数、读写、块

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

RocketMQ - Broker启动的时候都做了什么?

1. Broker启动的时候是如何初始化自己的核心配置的? 启动Broker的时候也是通过mqbroker这种脚本来实现的,最终脚本里一定会启动一个JVM进程,开始执行一个main class的代码。 实际上Broker的JVM进程启动之后,会执行BrokerStartup的main()方法,这个BrokerStartup类,就在r…

超详细解析:在执行一条SQL语句期间发生了什么?

目录 前言MySQL的执行流程Server层连接器查询缓存词法分析器预处理优化器执行器 引擎层具体流程为什么需要redologredolog的组成redolog如何提高性能&#xff1f;redo log与binlog区别 总结 前言 我们学习MySQL时&#xff0c;首先第一个接触到的就是SQL语句了&#xff0c;那么…