洛谷 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.pswp.cn/news/715790.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715790.shtml
英文地址,請注明出處:http://en.pswp.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型是一種龍門結構&#…