洛谷 2036.PERKET

采用递归法的方式进行题解。

思路:首先我们知道在n种材料当中,我们需要从中选择至少有一种得配料才行。也就是说,我们选择的配料数目是自己决定的,而不是那种组合型得对于你有要求的组合型递归方式。

所以我们会想到用指数型得递归来解决这个问题。这一点需要自己首先判断明白。

第二点,我们知道,在选数得过程中我们需要根据题目的条件进行判断这种配料的酸度和苦度,因此,在我们结束递归的时候需要进行计算我们已经存储的方案得和和乘积,然后再进行相减取绝对值计算。

当然,这里也有比较坑得点,那就是,当我们在判断没有方案的时候我们需要知道,这个时候我们定义的daiti是没有发生变化的,这里为什么需要用到daiti这个变量是因为这个原因,因为乘法的累乘需要我们在初始值为1得情况下进行的,所以我需要再定义一个变脸sum1进行赋值,当daiti没有发生变化的时候,说明我们的是没有方案的。因此,这样就判断完毕了。

注意:当我们在函数中判断完毕之后,那么我们还需要知道一件事,就是在全部不选择配料的时候,这个结果我们也会放在数组里面,这个时候最终结果就是0,始终是0,这个时候我们需要找到第二个小的数,所以在找到最小的数之后赋予一个大的数,然后再继续遍历选出除最小值以外的最小数就行了。

上代码:

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath> 
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<sstream>
#include<map>
#include<limits.h>
#include<set>
#define MAX 40
#define _for(i,a,b) for(int i=a;i<(b);i++)
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef long long LL;
LL n, m, counts=1;
LL arr[MAX][MAX];
LL res = 10e9;
LL st[MAX];
LL cunchu[MAX];
void dfs(int u) {if (u > n) {LL sum1 = 0;LL daiti = 1;LL sum2 = 0;_for(i, 1, n + 1) {if (st[i] == 1) {daiti *= arr[i][1];sum2 += arr[i][2]; }}if (daiti != 1)sum1 = daiti;cunchu[counts++] = abs(sum1 - sum2);return;}st[u] = 1;dfs(u + 1);st[u] = 0;st[u] = 2;dfs(u + 1);st[u] = 0;
}
int main() {ios::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);cin >> n;_for(i, 1, n + 1) {_for(j, 1, 3)cin >> arr[i][j];}dfs(1);LL index = 0;LL maxs = INT_MAX;_for(i, 1, counts){if (maxs > cunchu[i]) {maxs = cunchu[i];index = i;}}cunchu[index] = INT_MAX;_for(i, 1, counts) {res = min(res, cunchu[i]);}cout << res;return 0;
}

当然,这是比较笨的写法,但是我们需要进行优化一下,对于dfs暴搜来说,在main函数的调用中我们需要简介一些,接下来就是在判断没有方案的时候进行优化了一下,也就是定义一个flag标志,这样在遍历的时候就能知道到底有没有方案了。

下面是优化之后的代码:

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath> 
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<sstream>
#include<map>
#include<limits.h>
#include<set>
#define MAX 50
#define _for(i,a,b) for(int i=a;i<(b);i++)
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef long long LL;
LL n, m, counts=1;
LL arr[MAX][MAX];
LL res = 10e9;
LL st[MAX];
LL cunchu[MAX];
bool flag = false;
void dfs(int u) {if (u > n) {flag = false;LL sum1 = 1;LL sum2 = 0;_for(i, 1, n + 1) {if (st[i] == 1) {flag = true;sum1 *= arr[i][1];sum2 += arr[i][2]; }}if (flag) {res = min(res, abs(sum1 - sum2));}return;}st[u] = 1;dfs(u + 1);st[u] = 0;st[u] = 2;dfs(u + 1);st[u] = 0;
}
int main() {ios::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);cin >> n;_for(i, 1, n + 1) {_for(j, 1, 3)cin >> arr[i][j];}dfs(1);cout << res;return 0;
}

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

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

相关文章

(五)网络优化与超参数选择--九五小庞

网络容量 网络中神经单元数越多&#xff0c;层数越多&#xff0c;神经网路的拟合能力越强。但是训练速度&#xff0c;难度越大&#xff0c;越容易产生过拟合。 如何选择超参数 所谓超参数&#xff0c;也就是搭建神经网路中&#xff0c;需要我们自己去选择&#xff08;不是通…

LeetCode 刷题 [C++] 第45题.跳跃游戏 II

题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 nums[n …

递归函数(c++题解)

题目描述 对于一个递归函数w(a, b, c)。 如果a < 0 or b < 0 or c < 0就返回值1。 如果a > 20 or b > 20 or c > 20就返回W(20,20,20)。 如果a < b并且b < c 就返回w(a, b, c − 1) w(a, b − 1, c − 1) − w(a, b − 1, c)&#xff0c; 其它别…

计算机网络知多少-第1篇

一、 从输入URL到页面展示到底发生了什么&#xff1f; 1. 首先浏览器会查看电脑本地缓存&#xff0c;如果有直接返回&#xff0c;否则需要进行下一步的网络请求。 2. 在网络请求之前&#xff0c;需要先进行DNS解析&#xff0c;来找到请求域名的ip地址。如果是HTTPS请求&#…

【C语言】熟悉文件基础知识

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 文件 为了数据持久化保存&#xff0c;使用文件&#xff0c;否则数据存储在内存中&#xff0c;程序退出&#xff0c;内存回收&#xff0c;数据就会丢失。 程序设计中&…

微信小程序,h5端自适应登陆方式

微信小程序端只显示登陆(获取opid),h5端显示通过账户密码登陆 例如: 通过下面的变量控制: const isWeixin ref(false); // #ifdef MP-WEIXIN isWeixin.value true; // #endif

Git 查看提交历史

命令说明git log查看历史提交记录git blame (file)以列表形式查看指定文件的历史修改记录 git log 在使用 Git 提交了若干更新之后&#xff0c;又或者克隆了某个项目&#xff0c;想回顾下提交历史&#xff0c;我们可以使用 git log 命令查看。 git log 命令用于查看 Git 仓库中…

LIN基础:从LIN Frame开始

目录&#xff1a; 1、LIN的网络拓扑 2、LIN Frame 1&#xff09;Header 2&#xff09;Response 3、LIN的通信规则 1&#xff09;LIN的发送行为示例 2&#xff09;LIN的接收行为示例 虽然LIN总线的通信速率不高&#xff0c;工程中&#xff0c;最高的速率也就19200bps。…

c语言extern关键字

extern 是C和C中的关键字&#xff0c;用于声明一个变量或函数的存在&#xff0c;但不进行定义。 它通常用于在一个源文件中引用另一个源文件中定义的变量或函数。 例如&#xff0c;extern int x; 表示 x 是一个整数变量&#xff0c;但它的实际定义将在其他文件中。在引用它的文…

StarRocks——Stream Load 事务接口实现原理

目录 前言 一、StarRocks 数据导入 二、StarRocks 事务写入原理 三、InLong 实时写入StarRocks原理 3.1 InLong概述 3.2 基本原理 3.3 详细流程 3.3.1 任务写入数据 3.3.2 任务保存检查点 3.3.3 任务如何确认保存点成功 3.3.4 任务如何初始化 3.4 Exactly Once 保证…

Leetcode - 周赛386

目录 一&#xff0c;3046. 分割数组 二&#xff0c;3047. 求交集区域内的最大正方形面积 三&#xff0c;3048. 标记所有下标的最早秒数 I 四&#xff0c;3049. 标记所有下标的最早秒数 II 一&#xff0c;3046. 分割数组 将题目给的数组nums分成两个数组&#xff0c;且这两个…

探索RedisJSON:将JSON数据力量带入Redis世界

探索RedisJSON&#xff1a;将JSON数据力量带入Redis世界 当我们谈论数据存储和查询时&#xff0c;Redis和JSON都是无法忽视的重要角色。Redis以其高效的键值存储、快速的读/写速度、以及丰富的数据结构赢得了开发者的喜爱。而JSON&#xff0c;作为一种轻量级的数据交换格式&am…

「Vue3系列」Vue3 条件语句/循环语句

文章目录 一、Vue3 条件语句1. v-if2. v-else-if 和 v-else3. v-show4. 使用计算属性进行条件渲染5. v-if与v-show比较v-ifv-show性能考虑使用场景 二、Vue3 循环语句1. 遍历数组2. 遍历对象3. 使用索引4. 注意事项 三、相关链接 一、Vue3 条件语句 在 Vue 3 中&#xff0c;你…

盲人出行:科技创造美好的未来

在繁忙的都市中&#xff0c;我每天都要面对许多挑战&#xff0c;盲人出行安全保障一直难以得到落实。我看不见这个世界&#xff0c;只能依靠触觉和听觉来感知周围的一切。然而&#xff0c;我从未放弃过对生活的热爱和对未来的憧憬。在一次机缘巧合下&#xff0c;我认识了一款名…

C3_W2_Collaborative_RecSys_Assignment_吴恩达_中英_Pytorch

Practice lab: Collaborative Filtering Recommender Systems(实践实验室:协同过滤推荐系统) In this exercise, you will implement collaborative filtering to build a recommender system for movies. 在本次实验中&#xff0c;你将实现协同过滤来构建一个电影推荐系统。 …

VLAN实验报告

实验要求&#xff1a; 实验参考图&#xff1a; 实验过程&#xff1a; r1: [r1]int g 0/0/0.1 [r1-GigabitEthernet0/0/0.1]ip address 192.168.1.1 24 [r1-GigabitEthernet0/0/0.1]dot1q termination vid 2 [r1-GigabitEthernet0/0/0.1]arp broadcast enable [r1]int g 0/0/…

Mysql学习之MVCC解决读写问题

多版本并发控制 什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;多版本并发控制。顾名思义&#xff0c;MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之&#xff0…

django的模板渲染中的【高级定制】:按数据下标id来提取数据

需求&#xff1a; 1&#xff1a;在一个页面中显示一张数据表的数据 2&#xff1a;不能使用遍历的方式 3&#xff1a;页面中的数据允许通过admin后台来进行修改 4&#xff1a;把一张数据表的某些内容渲染到[xxx.html]页面 5&#xff1a;如公司的新商品页面&#xff0c;已有固定的…

《梦幻西游》本人收集的34个单机版游戏,有详细的视频架设教程,值得收藏

梦幻西游这款游戏&#xff0c;很多人玩&#xff0c;喜欢研究的赶快下载吧。精心收集的34个版本。不容易啊。里面有详细的视频架设教程&#xff0c;可以外网呢。 《梦幻西游》本人收集的34个单机版游戏&#xff0c;有详细的视频架设教程&#xff0c;值得收藏 下载地址&#xff1…

FDM打印机学习

以下内容摘自网络&#xff0c;仅供学习讨论&#xff0c;侵删。 持续更新。。。 FDM打印机是通过喷头融化丝状耗材&#xff08;PLA&#xff0c;ABS等材料&#xff09;&#xff0c;然后逐层涂在热床上&#xff0c;一层一层逐级抬高。 结构分类 Prusa i3型是一种龙门结构&#…