送礼物 dfs 双向dfs 剪枝 java

news2024/11/26 20:50:56

🍑 送礼物

达达帮翰翰给女生送礼物,翰翰一共准备了 N N N 个礼物,其中第 i i i 个礼物的重量是 KaTeX parse error: Undefined control sequence: \[ at position 2: G\̲[̲i\]

达达的力气很大,他一次可以搬动重量之和不超过 W W W 的任意多个物品。

达达希望一次搬掉尽量重的一些物品,请你告诉达达在他的力气范围内一次性能搬动的最大重量是多少。

输入格式

第一行两个整数,分别代表 W W W N N N

以后 N N N 行,每行一个正整数表示 KaTeX parse error: Undefined control sequence: \[ at position 2: G\̲[̲i\]

输出格式

仅一个整数,表示达达在他的力气范围内一次性能搬动的最大重量。

数据范围

1 ≤ N ≤ 46 1 \le N \le 46 1N46,
1 ≤ W , G [ i ] ≤ 2 31 − 1 1 \le W,G[i] \le 2^{31}-1 1W,G[i]2311

输入样例:

20 5
7
5
4
18
1

输出样例:

19

在这里插入图片描述

import java.util.*;

class Main
{
	static int N = 100;
	static int n, m, k;
	static Integer[] w = new Integer[N];
//	static int[] ww = new int[1 << 25];// 存储能凑出的重量
	static Integer[] ww = new Integer[1 << 25];
	static HashSet<Integer> set = new HashSet<>();// 实现去重
	static int cnt, ans;// cnt 记录能凑出的重量数

	/**
	 * @param u 当前枚举的物品(未计算)
	 * @param s 当前的总重量
	 */
	static void dfs1(int u, int s)
	{
		if (u == k)
		{
			set.add(s);// 把重量存在 HashSet 里边去
			return;
		}

		dfs1(u + 1, s);

		if ((long) s + w[u] <= m)
			dfs1(u + 1, s + w[u]);
	}

	/**
	 * @param u 表示当前枚举到的物品
	 * @param s 表示当前方案的总体积
	 */
	static void dfs2(int u, int s)
	{
		if (u == n)
		{
			int l = 0;
			int r = cnt - 1;
			while (l < r)
			{
				int mid = l + r + 1 >> 1;
//				找到 最大的 小于等于 (m-s) 的数
				if (ww[mid] <= m - s)
					l = mid;
				else
					r = mid - 1;
			}
			ans = Math.max(ans, ww[l] + s);
			return;
		}
		dfs2(u + 1, s);
		if ((long) s + w[u] <= m)
			dfs2(u + 1, s + w[u]);
	}

	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		m = sc.nextInt();// 总体积
		n = sc.nextInt();// 物品个数
		for (int i = 0; i < n; i++)
			w[i] = sc.nextInt();
		Arrays.sort(w, 0, n, (o1, o2) -> o2 - o1);// 从大到小进行排序
		k = n / 2 ;
		dfs1(0, 0);
		cnt = 1;
		//Integer数组进行排序时一定要初始化为一个值,就算是全局数组也没有默认值
		ww[0] = 0;
		for (int x : set)
			ww[cnt++] = x;
		Arrays.sort(ww, 0, cnt, (o1, o2) -> o1-o2);// 这次是从小到大进行排序
		dfs2(k, 0);
		System.out.println(ans);
	}
}

👨‍🏫 Bug-Free 的题解

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

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

相关文章

有效的括号——力扣20

题目描述 思路 1.判断括号的有效性可以使用「栈」这一数据结构来解决 2.遍历给定的字符串 s。当遇到一个左括号时&#xff0c;我们会期望在后续的遍历中&#xff0c;有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合&#xff0c;因此我们可以将这个左括号放入栈顶。…

2.项目中的文件

项目的路径是这样的 目录 1 pages 1.1 json 1.2 wxml 1.3 wxss 1.4 js 2 utils 3 .eslintrc.js 4 app.js 5 app.json 6 app.wxss 7 project.config.json 8 project.private.config.json 9 sitemap.json 1 pages pages 用来存放所有小程序的页面&am…

数据结构与算法基础(青岛大学-王卓)(4)

第四弹啊&#xff0c;栈和队列终于叮叮咚咚看完了&#xff0c;小龙虾呀鳝鱼汤啊倍儿香~~~~&#xff0c;配合本文食用更香 &#x1f603; 文章目录 栈和队列栈队列案列的引入栈的表示和操作栈的抽象数据类型定义顺序栈顺序栈的表示顺序栈的初始化顺序栈基本操作顺序栈的入栈顺序…

基于Python的接口自动化-JSON模块的操作

目录 引言 一、JSON是啥&#xff1f; 二、JSON的有效数据类型 三、Python JSON库的使用 结语 引言 在使用Python进行接口自动化测试脚本时&#xff0c;一般都是脚本只写接口测试逻辑实现&#xff0c;而执行脚本时需要的测试用例数据都是写入excel、数据库或者指定的配置文…

入门编程指南:如何从零开始学习编程?

一、自学编程需要注意什么&#xff1f; 自学编程需要注意以下几点&#xff1a; 选择适合自己的编程语言&#xff0c;在学习初期建议选择易入手的编程语言。需要不断地练习&#xff0c;并建立自己的编程项目&#xff0c;以此提高编程技巧和应用能力。追求知识的全面性&#xf…

实验二十二、压控电压源二阶带通滤波器的参数选择

一、题目 如图1所示电路中&#xff0c;已知 R 51 k Ω R51\,\textrm kΩ R51kΩ&#xff0c; R 3 20 k Ω R_320\,\textrm kΩ R3​20kΩ&#xff1b; f 0 1 kHz f_01\,\textrm{kHz} f0​1kHz。利用 Multisim 分析下列问题&#xff1a; &#xff08;1&#xff09;选取合适…

[图表]pyecharts-K线图

[图表]pyecharts-K线图 先来看代码&#xff1a; import requests from typing import List, Unionfrom pyecharts import options as opts from pyecharts.charts import Kline, Line, Bar, Griddef get_data():response requests.get(url"https://echarts.apache.org/…

攻击者使用 Python 编译的字节码来逃避检测

以 PyPI&#xff08;Python 包索引&#xff09;等开源包存储库为目标的攻击者设计了一种新技术&#xff0c;可以将他们的恶意代码隐藏在安全扫描器、人工审查和其他形式的安全分析中。 在一次事件中&#xff0c;研究人员发现恶意软件代码隐藏在 Python 字节码 (PYC) 文件中&am…

Scala学习(十二)---模式匹配

文章目录 1.基本语法2.模式守卫3.匹配常量和类型4.匹配对象和样例类4.1 匹配对象4.2 匹配样例类 5.偏函数中的模式匹配 1.基本语法 在Scala中的模式匹配类似于Java中的switch语法 //模式匹配基本语法val a10val b20val c""c match {case "" >println(…

VScode远程连接虚拟机(ubuntu系统)

文章目录 1. Windows端安装VScode2. 安装远程登录插件3. 配置Remote-SSH插件关于关闭后如何打开该配置文件 4. 测试ubuntu与windows可否ping通5. 在Ubuntu中安装 SSH1.检查是否安装ssh-server2.安装openssh-server3.查看ssh服务是否启动4.Ubuntu中配置openssh-server开机自动启…

路径规划算法:基于蝠鲼觅食优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于蝠鲼觅食优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蝠鲼觅食优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

6.4下周黄金最新行情走势分析及开盘交易策略

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周五(6月2日)&#xff0c;美市尾盘&#xff0c;现货黄金收报1947.82美元/盎司&#xff0c;大幅下跌29.70美元或1.50%&#xff0c;日内最高触及1983.43美元/盎司&…

chatgpt赋能python:Python升序排序

Python升序排序 Python是一种非常强大的编程语言&#xff0c;它在数学计算、数据处理等方面具备很强的优势。在实际应用中&#xff0c;我们经常需要对一系列数据进行排序。而在Python中&#xff0c;升序排序是非常常见的操作。本篇文章将介绍在Python中如何使用ifelse进行升序…

JavaWeb13(ajax01 AJAX介绍AJAX登陆AJAX加入购物车AJAX修改购物车商品数量)

目录 一. 什么是ajax 二.为什么需要AJAX? 三. 同步和异步的区别. 四.基于jQuery实现AJAX语法 4.1 语法1-$.ajax(url,[settings]). 4.1 语法2-$.get/post(url, [data], [callback], [type]). 五 .案例 5.1 ajax实现登录 ①html代码 用户登录 用户名&#xff1a; 密码…

【无功优化】基于改进教与学算法的配电网无功优化【IEEE33节点】(Matlab代码时候)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

揭秘照片修复技巧:手把手教你如何让模糊照片变清晰

作为一名修图小能手&#xff0c;行走于修图界&#xff0c;修复模糊的照片是必备的技能之一&#xff0c;最近收到很多粉丝的私信&#xff0c;清一色都是问的怎么免费把照片变清晰&#xff0c;为了给各位小伙伴们解决难题&#xff0c;我决定拿出我私藏多年的秘密武器&#xff0c;…

【CloudCompare教程】016:计算点云的法向量

本文讲解CloudCompare计算点云的法向量的方法。 文章目录 一、法向量概述二、法向量计算1. 平面法向量2. 二次曲面3.三角网格化一、法向量概述 法向量,是空间解析几何的一个概念,垂直于平面的直线所表示的向量为该平面的法向量。法向量适用于解析几何。由于空间内有无数个直…

HAL库记录-RTC

芯片:STM32F29IIGT6 阿波罗开发板 1.配置时钟 2.HAL外设配置 3.代码解析 生成rtc文件 RTC_HandleTypeDef hrtc;/* RTC init function */ void MX_RTC_Init(void) {/* USER CODE BEGIN RTC_Init 0 */RTC_TimeTypeDef rtc_time;RTC_DateTypeDef rtc_data;/* USER CODE END RTC…

node笔记_生成自定义目录文件

文章目录 ⭐前言⭐node生成目录&#x1f496; mkdirSync创建目录&#x1f496; stat判断目录是否存在&#x1f496; mkdir创建目录&#x1f496; 动态创建目录文件 ⭐结束 ⭐前言 大家好&#xff01;我是yma16&#xff0c;本文分享node生成自定义目录文件。 背景&#xff1a; …

chatgpt赋能python:Python中去掉数字末尾的0:一种简单有效的方法

Python中去掉数字末尾的0&#xff1a;一种简单有效的方法 Python作为一种流行的编程语言&#xff0c;经常被用于各种应用程序的编写。在这篇文章中&#xff0c;我们将介绍如何使用Python去掉数字末尾的零的一种简单有效的方法。 为什么要去掉数字末尾的0&#xff1f; 对于数…