蓝桥杯2023年-买瓜(dfs,类型转换同样耗时)

题目描述

小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜,每个瓜的重量为 Ai 。

小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。

小蓝希望买到的瓜的重量的和恰好为 m 。

请问小蓝至少要劈多少个瓜才能买到重量恰好为 m 的瓜。如果无论怎样小蓝都无法得到总重恰好为 m 的瓜,请输出 −1 。

思路

朴素做法:

dfs每个瓜,有三种选择:

1.选瓜

2.劈瓜,选瓜

3.不选瓜

则复杂度为3^n,也就是3^30,大概2e14,绝对会超时。

所以需要剪枝优化

剪枝优化:

1.如果当前已有重量>所需重量,则剪枝

2.如果当前已有重量+剩下的重量总和<所需重量,剪枝,(求剩下的重量可以用后缀和数组优化)

3.如果当前已经劈过的次数>=目前的劈瓜的最小次数,剪枝

细枝末节:

还有一些细枝末节可优化:

1.除2的话可能会有小数,但是浮点数运算会慢很多,所以我们可以通过放大(乘2)原重量与所需重量。这样就可以只使用整型运算了。(也可以用两个数组分别存储放大后的重量与相应的减半的数量,这样可以在每次搜索时减少一次运算,不过应该影响不大)

2.将重量从大到小排序,这样可以提前排除许多剪枝。

3.强制类型转换的耗时也不少。(int转long之类的)(这一点是我没有想到的,也是我卡题的原因,经过不断不断一直一直反反复复的比对题解代码后才发现的。)

大家可以感受一下:

有转换的耗时,结果超时一半多

#include<bits/stdc++.h>
using namespace std;
int a[33];//原重
int b[33];//半重
long latter[33];
int m;
int n;
int ans=100;
void dfs(int u,int sum,int k){//sum为int类型时,long与int进行加减时会进行一次类型转换if(u==n||sum>=m||k>=ans||latter[u]+sum<m){if(sum==m)ans=min(ans,k);return ;}dfs(u+1,sum+a[u],k);dfs(u+1,sum+b[u],k+1);dfs(u+1,sum,k);
}
int main()
{cin>>n>>m;m*=2;for(int i=0;i<n;i++){cin>>b[i];a[i]=b[i]*2;}sort(a,a+n,greater<int>());sort(b,b+n,greater<int>());for(int i=n-1;i>=0;i--)latter[i]=latter[i+1]+a[i];dfs(0,0,0);if(ans!=100)cout<<ans;else cout<<-1;
}

没有类型转换的,成功通过,二者时间整整相差一倍

#include<bits/stdc++.h>
using namespace std;
int a[33];//原重
int b[33];//半重
long latter[33];
int m;
int n;
int ans=100;
void dfs(int u,long sum,int k){//sum为long类型时,没有类型转换的耗时if(u==n||sum>=m||k>=ans||latter[u]+sum<m){if(sum==m)ans=min(ans,k);return ;}dfs(u+1,sum+a[u],k);dfs(u+1,sum+b[u],k+1);dfs(u+1,sum,k);
}
int main()
{cin>>n>>m;m*=2;for(int i=0;i<n;i++){cin>>b[i];a[i]=b[i]*2;}sort(a,a+n,greater<int>());sort(b,b+n,greater<int>());for(int i=n-1;i>=0;i--)latter[i]=latter[i+1]+a[i];dfs(0,0,0);if(ans!=100)cout<<ans;else cout<<-1;
}

也不排除是测评机的原因,不过以后最好还是减少类似的类型转换更保险一些。

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

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

相关文章

计算机组成原理之机器:存储器之辅助存储器

计算机组成原理之机器&#xff1a;存储器之辅助存储器 笔记来源&#xff1a;哈尔滨工业大学计算机组成原理&#xff08;哈工大刘宏伟&#xff09; Chapter3&#xff1a;存储器之辅助存储器 3.1 概述 3.2 磁记录原理 通不同方向电流时磁化方向不同&#xff0c;由此区分写入…

BUUCTF:[MRCTF2020]ezmisc

题目地址&#xff1a;https://buuoj.cn/challenges#[MRCTF2020]ezmisc 下载附件打开是一张照片&#xff1a; 放到kali中发现crc校验错误&#xff0c;修改照片宽高&#xff1a; 保存即可发现flag flag为&#xff1a; flag{1ts_vEryyyyyy_ez!}

报错:ModuleNotFoundError: No module named ‘tensorrt’

写在前面 我安装了tensorRT,在运行它自带的模型都没问题。 但是在代码中import tensorrt就报错&#xff1a; ModuleNotFoundError: No module named ‘tensorrt’。 网上搜了一大堆&#xff0c;发现是没有在自己的python环境下安装。 所以特意写这篇文章记录一下。 在进行下一…

webUI自动化测试框架

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

C#中实现接口的一些小知识(C#用abstract或virtual来实现接口成员)

文章目录 不可用的修饰可用的修饰非抽象类实现接口抽象类实现接口抽象类与接口方法同名时一同实现 不可用的修饰 在C#中实现接口时&#xff0c;我们不能直接使用static或const来实现接口成员&#xff0c;因为接口中的成员默认都是实例成员&#xff0c;并且它们表示一种契约&am…

c++的STL(2)-- vector容器

目录 1. 默认构造 代码: 相关知识点: 2. 有参构造函数 以及 使用{}初始化对象 代码: 相关知识点: 3. vector容器在尾部添加和删除元素 代码: 使用push_back()和pop_back()进行尾部元素的添加和删除 相关知识点: 代码: 使用emplace_back在尾部添…

人工蜂群算法

人工蜂群算法 人工蜂群算法&#xff08;Artificial Bee Colony Optimization,ABC&#xff09;是一种基于蜜蜂觅食行为的优化算法&#xff0c;由土耳其学者Karaboga于2005年提出&#xff0c;算法模拟蜜蜂的采蜜行为对优化问题进行求解。 算法原理 ABC算法的核心思想是将优化问…

Mysql学习笔记之事务详解(读未提交、读以提交、可重复读、串行化读)

在这个博主的基础上&#xff0c;增加两种情况的对比&#xff1a;https://blog.csdn.net/llllllkkkkkooooo/article/details/108068919 可重复读中幻读现象&#xff08;未使用MVCC&#xff09; 设置可重复读的隔离级别 set global transaction isolation level repeatable read…

「解析文件流,Java之FileOutputStream助您轻松操作文件!」

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

TCP重传机制、滑动窗口、拥塞控制

一、总述 TCP&#xff0c;Transmission Control Protocol&#xff0c;是一个面向连接、基于流式传输的可靠传输协议&#xff0c;考虑到的内容很多&#xff0c;比如数据包的丢失、损坏、分片和乱序等&#xff0c;TCP协议通过多种不同的机制来实现可靠传输。今天&#xff0c;重点…

复试人工智能前沿概念总结

1.大模型相关概念&#xff08;了解即可&#xff09; 1.1 GPT GPT&#xff0c;全称为Generative Pre-training Transformer&#xff0c;是OpenAI开发的一种基于Transformer的大规模自然语言生成模型。GPT模型采用了自监督学习的方式&#xff0c;首先在大量的无标签文本数据上进…

Android使用WebView打开内嵌H5网页

Android打开外部网页链接请参考上一篇文章 https://public.blog.csdn.net/article/details/136384559 继上篇&#xff0c;新建assets文章夹&#xff0c;将H5的网页资源放到此文件夹下 把H5的资源文件都拷进来 这个时候&#xff0c;将添加打开本地网页的代码&#xff1a; //打…

【活动】2024年AI辅助研发:深度变革与无限潜力

作为一名前端程序员&#xff0c;深入探讨2024年AI在软件研发领域的应用趋势及其影响&#xff0c;我们可以看到一场引人注目的转型正在发生。AI辅助研发对于前端开发而言&#xff0c;不仅意味着效率的飞跃&#xff0c;更是在用户体验设计、代码编写、性能优化、项目管理等诸多方…

Java零基础 - 数组的定义和声明

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

httprunner用例结构(前后置)

说明&#xff1a;httprunner 结合 pytest 的前后置方式 1. 用例级别前后置 1.1. setup teardown class TestCaseRefTestcase(HttpRunner):# 用例级别前后置def setup(self):logger.warning("------用例级别前置")def teardown(self):logger.warning("------用…

在Vue中处理接口返回的二进制图片数据

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Android使用WebView打开外部网页链接

发布Android应用&#xff0c;除了用原生开发外&#xff0c;更多是采用内嵌H5网页的方式来做&#xff0c;便于更新以及多平台使用。 一、第一种方式是直接通过WebView打开外部H5链接。 新建Android工程 直接创建一个工程&#xff0c;点击运行就可以了&#xff0c;打开是个空页…

2024 批量下载公众号文章内容/阅读数/在看数/点赞数/留言数/粉丝数导出pdf文章备份(带留言):公众号记忆承载近1500篇历史文章在线查看,找文章方便了

关于公众号文章批量下载&#xff0c;我之前写过很多文章&#xff1a; 视频更新版&#xff1a;批量下载公众号文章内容/话题/图片/封面/音频/视频&#xff0c;导出html&#xff0c;pdf&#xff0c;excel包含阅读数/点赞数/留言数 2021陶博士2006/caoz的梦呓/刘备我祖/六神读金…

打造禹州中医药大模型,以AI驱动业务创新(内附孙思邈GPT内测版)

大禹智库 第78 期&#xff08;总第409 期&#xff09; 2024年 3 月 4 日 在中医药传承与发展的关键时期&#xff0c;结合许昌市的地域特色和产业优势&#xff0c;大禹智库提出“打造禹州中医药大模型&#xff0c;以AI驱动业务创新”的战略构想。本报告围绕构建禹州中医药现代化…