当前位置: 首页 > news >正文

分成sum接近的2个集合,返回相对小的sum

题目描述:给定一个正数数组arr,请把arr中所有的数分成两个集合,尽量让两个集合的累加和接近,返回最接近的情况下,较小集合的累加和sum。

way:选还是不选

//arr[index...]可以自由选择,返回累加和尽量接近rest,但不能超过rest的情况下,最接近的值

#include<iostream>
#include<vector>
using namespace std;//arr[index...]可以自由选择,返回累加和尽量接近rest,但不能超过rest的情况下,最接近的值
int process(vector<int>arr, int index, int rest)
{//没有数可选if(index==arr.size()){return 0;}//如果不选当前数int p1=process(arr,index+1,rest);//如果选当前数(前提是可以选)int p2=0;if(rest-arr[index]>=0){p2=arr[index] + process(arr,index+1,rest-arr[index]);}return max(p1,p2);
}int way(vector<int>arr)
{//不合法的数组if(arr.size()<2) return -1;int sum=0,N=arr.size();for(int i=0; i<N; i++){sum+=arr[i];}return process(arr,0, sum>>1);
}

way2:dp版。

int dpWay(vector<int>arr)
{//不合法的数组if(arr.size()<2) return -1;int sum=0,N=arr.size();for(int i=0; i<N; i++){sum+=arr[i];}int half=(sum>>1);vector<vector<int>>dp(N+1, vector<int>(half+1));for(int index=N-1; index>=0; index--){for(int rest=0; rest<=half; rest++){int p1=dp[index+1][rest];int p2=0;if(rest-arr[index]>=0){p2=arr[index]+dp[index+1][rest-arr[index]];}dp[index][rest]=max(p1,p2);}}return dp[0][half];
}
http://www.lryc.cn/news/355376.html

相关文章:

  • SpringBoot前置知识01-SPI接口
  • 数学建模--LaTeX的基本使用
  • 授权调用: 介绍 Transformers 智能体 2.0
  • 流媒体内网穿透/组网/视频协议转换EasyNTS上云网关如何更改密码?
  • HTML5的标签(文本链接、图片路径详解)
  • React Native 之 Linking(链接)(十五)
  • Java实现图书系统
  • Git提交和配置命令
  • 已解决java.lang.ExceptionInInitializerError: 初始化程序中的异常错误的正确解决方法,亲测有效!!!
  • 报表显示中,是否具备条件格式功能设计?
  • 完全二叉树查找
  • Web安全:SQL注入之时间盲注原理+步骤+实战操作
  • [JDK工具-10] jvisualvm 多合一故障处理工具
  • 【GateWay】自定义RoutePredicateFactory
  • 今日总结2024/5/27
  • 使用 Snort 进行入侵检测
  • C++ | Leetcode C++题解之第116题填充每个节点的下一个右侧节点指针
  • 计算机网络学习
  • 代码随想录算法训练营第四天| 24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II
  • 职业探索--运维体系-SRE岗位/CRE岗位/运维岗位-服务心态-运维职业发展方向-运维对象和运维场景
  • 深入理解C++智能指针系列(五)
  • 1.Nginx上配置 HTTPS
  • wordpress教程视频 wordpress教程网盘 wordpress教程推荐wordpress教程网
  • vue3 3D炫酷模型banner图
  • 小程序内使用路由
  • 【数据结构】第七节:堆
  • 前端大师-高级Web开发测验
  • 延迟初始化和密封类
  • Kotlin基础之基本语法
  • 多态(难的起飞)