DFS刷題(25.3.13)

題目1——烤雞

題目描述

在這里插入圖片描述

題解

這是一個簡單的暴搜題目,由于一共由10種配料,每種配料可以放1到3克,因此只需要用dfs對每種配料放入的質量進行暴力搜索即可,如果放入的配料質量之和等于題目給出的美味程度 n n n,記錄一下,最終將所有得到的符合題目要求的答案輸出一遍。
代碼

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;int n;
int res[N][10];
int temp[10];
int idx;void dfs(int u, int sum)
{if(u == 10){if(sum == n){for(int i = 0; i < 10; i ++)res[idx][i] = temp[i];idx ++;}return ;}// 枚舉for(int i = 1; i <= 3; i ++){// 選擇itemp[u] = i;dfs(u + 1, sum + i);}
}
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>n;dfs(0, 0);if(idx){cout<<idx<<'\n';for(int i = 0; i < idx; i ++){for(int j = 0; j < 10; j ++)cout<<res[i][j]<<' ';cout<<'\n';}}else{cout<<"0"<<'\n';}return 0;
}

題目2——外星人

題目描述

在這里插入圖片描述
在這里插入圖片描述

題解

乍一看題目感覺很復雜,但看了樣例手動模擬了一下之后發現就是簡單的排列組合,即給定一組數(輸入的第三行),從這組數開始,按照從小到大(數字的大小)進行全排列第 M M M次后的結果。

題目樣例
1 2 3 4 5 ? —— ? 原始序列
1 2 3 5 4 ? —— ? 第一次排列得到的序列
1 2 4 3 5 ? —— ? 第二次排列得到的序列
1 2 4 5 3 ? —— ? 第三次排列得到的序列( M = 3 M = 3 M=3

也就是說,我們以給定的初始序列為起點,使用dfs進行全排列,排列到第 M M M次的時候輸出答案,退出即可
代碼

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;int n, m, num;  //num記錄第幾次
int figure[N];
int temp[N];
bitset<N> bt;void dfs(int u)
{// 找到一種排列if(u == n){num ++;if(num == m + 1) // 第一次找到排序是原始序列 因此要找m+1次{for(int i = 0; i < n; i ++)cout<<temp[i]<<' ';exit(0);}return ;}for(int i = 1; i <= n; i ++){if(num == 0) i = figure[u];  // 從指定位置開始搜索if(!bt[i]){bt[i] = true;temp[u] = i;dfs(u + 1);// 恢復現場bt[i] = false;}}
}
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>n>>m;for(int i = 0; i < n; i ++) cin>>figure[i];dfs(0);return 0;
}

題目3——火柴棒等式

題目描述

在這里插入圖片描述

題解

首先閱讀題目,總的來說就是找到ABC三個數字,要求滿足:

  • A + B = C A + B = C A+B=C
  • 三個數字使用的火柴棒總數為n - 4(加號和等號一共要消耗4個火柴棒)

對于這種題目,我們可以對每個位置(A、B、C 一種三個位置)上可以選擇的數字進行爆搜,每次搜索完之后檢查找到的三個數字是否滿足以上的兩個條件
由于ABC可能會為兩位數或者三位數,因此我們還要開一個數組(dic)來維護每個數字需要多少根火柴棒,這里我使用了記憶搜索的思想,即如果dic[x]x為數字)在之前使用過,則記錄下來;如果沒使用過,則計算后再保存下來,方便下次調用時使用。具體代碼如下所示:

int dic[1005] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int cal(int x)
{if(dic[x] > 0) return dic[x];int sum = 0, t = x;
//	cout<<t<<'\n';while(x){sum += dic[x % 10];x /= 10;}dic[t] = sum;return sum;
}

整體代碼

#include<bits/stdc++.h>
using namespace std;
const int N = 30;int n;
int dic[1005] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int temp[N];
int res;int cal(int x)
{if(dic[x] > 0) return dic[x];int sum = 0, t = x;
//	cout<<t<<'\n';while(x){sum += dic[x % 10];x /= 10;}dic[t] = sum;return sum;
}
void dfs(int u, int sum)
{if(sum > n) return ;if(u == 3){if((temp[0] + temp[1] == temp[2]) && sum == n)res ++;return ;}for(int i = 0;  i <= 1000; i ++){temp[u] = i;  // 第u個位置選擇idfs(u + 1, sum + cal(i));}
}
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n; n -= 4;dfs(0, 0);cout<<res;return 0;
}

題目4——PERKET

題目描述

在這里插入圖片描述

題解

這道題目也比較簡單,是一種指數類問題,即大致思路就是對每一種配料選和不選進行暴力搜索,最后維護一下最小的酸度和苦度的絕對值即可。
注意由于題目所述必須至少添加一種配料,因此每次枚舉完所有的配料選擇方案時,要加一個判斷,把一種配料都不選的方案篩掉。
代碼

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 20;ll n;
ll s[N], b[N];
int bt[N];
ll res = 1e9;void dfs(int u)
{if(u == n){int sum = 0;for(int i = 0; i < n; i ++) sum += bt[i];if(sum == 0) return;  // 一種材料都沒選ll ss = 1, bb = 0;for(int i = 0; i < n; i ++){if(bt[i]) ss *= s[i];bb += bt[i] * b[i];}res = min(res, abs(ss - bb));return ;}// 選擇第u種材料bt[u] = 1;dfs(u + 1);// 不選擇第u種材料bt[u] = 0;  //恢復現場dfs(u + 1);
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>n;for(int i = 0; i < n; i ++){cin>>s[i];  cin>>b[i];}dfs(0);cout<<res;return 0;
}

題目5——奇怪的電梯

題目描述

在這里插入圖片描述

題解

這道題剛上來覺得很復雜,但仔細想了一下之后,就是一個簡單的dfs,從樓層a開始,分別搜索上行和下行兩種方案,最終看能不能到達樓層b,注意不要忘記判斷樓層是否合法
!!!但是這樣會TLE
于是后來我進行了優化(參考洛谷題解里的大佬hhh),即使用一個數組去維護從樓層a開始,到當前樓層的最短距離,根據這個數組進行剪枝。舉個例子:

假如我們第一次到達樓層c,此時按按鈕的次數為3,由于這是第一次到達樓層c,因此我們把這個數字記錄下來;
而當我們再后續搜索時,再次到達了樓層c,按按鈕的次數為9,因為9 > 3,肯定得不到最優解,因此剪枝

代碼

#include<bits/stdc++.h>
using namespace std; 
const int N = 210;int n, a, b;
int k[N], dic[N];
int res = 0x3f3f3f3f;// u代表當前是第幾層 num 是按電梯次數
void dfs(int u, int num)  
{// 越界if(u > n || u <= 0) return ;// 不是最優if(num >= dic[u]) return ;else dic[u] = num;if(num > res) return ;// resif(u == b){res = min(res, dic[u]);}// 向上dfs(u + k[u], num + 1);// 向下dfs(u - k[u], num + 1);return ;
}
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>n>>a>>b;for(int i = 1; i <= n; i ++) cin>>k[i];memset(dic, 0x3f, sizeof(dic));dfs(a, 0);  // 從a樓開始if(res == 0x3f3f3f3f) cout<<"-1"<<'\n';else cout<<res;return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73197.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73197.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73197.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#中除了Dictionary,List,HashSet,HashTable 還有哪些可以保存列表的數據類型?

在 C# 中&#xff0c;除了 Dictionary、List、HashSet 和 Hashtable 之外&#xff0c;還有許多其他可以保存列表或集合類型的數據結構&#xff0c;具體包括以下幾類&#xff1a; &#x1f4cc; 數組類 1. Array&#xff08;數組&#xff09; 固定長度&#xff0c;性能高&…

《Python實戰進階》第21集:數據存儲:Redis 與 MongoDB 的使用場景

第21集&#xff1a;數據存儲&#xff1a;Redis 與 MongoDB 的使用場景 摘要 在現代應用開發中&#xff0c;數據存儲的選擇直接影響系統的性能、擴展性和成本。Redis 和 MongoDB 是兩種極具代表性的數據庫技術&#xff0c;它們分別擅長解決不同場景下的問題。本文將深入探討 Re…

三視圖轉stl導出 空心面片體 networkx shapely triangle numpy-stl

from shapely.geometry import Polygon import triangle from shapely.ops import unary_union from stl import mesh import numpy as np from collections import defaultdict from 三維投影線段尋找 import get_adjusted_clusters,get_clusters,get_intersect_lines import …

大摩閉門會:250312 學習總結報告

如果圖片分辨率不足&#xff0c;可右鍵圖片在新標簽打開圖片或者下載末尾源文件進行查看 本文只是針對視頻做相應學術記錄&#xff0c;進行學習討論使用

【51單片機】程序實驗15.DS18B20溫度傳感器

主要參考學習資料&#xff1a;B站【普中官方】51單片機手把手教學視頻 開發資料下載鏈接&#xff1a;http://www.prechin.cn/gongsixinwen/208.html 單片機套裝&#xff1a;普中STC51單片機開發板A4標準版套餐7 目錄 DS18B20介紹主要特性內部結構控制時序初始化時序寫時序讀時序…

ESP32芯片模組方案,設備物聯網無線通信,WiFi藍牙交互控制應用

在當下&#xff0c;物聯網正以前所未有的速度席卷全球&#xff0c;從繁華都市的智能建筑&#xff0c;到寧靜鄉村的智慧農業&#xff0c;從人們日常使用的可穿戴設備&#xff0c;到工業領域復雜精密的自動化生產線&#xff0c;物聯網的觸角已深入到生活與生產的每一個角落。 而…

Linux第二次練習

1.首先在根下面創建一個名為text的目錄 2.在根目錄下新建一個text目錄&#xff0c;然后在text目錄中新建上圖的一級目錄、二級目錄以及三級目錄 3.顯示/text目錄下文件的樹形拓撲圖 4.將linux樹狀結構圖中列出的所有文件用ll命令列出來

百雞問題-

百雞問題 #include<stdio.h> int main(){int n;scanf("%d",&n);int x,y,z;for(x0;x<100;x){for(y0;y<100;y){for(z0;z<100;z){if((x*15y*9z)<(3*n) && ((xyz)100)){printf("x%d,y%d,z%d\n",x,y,z);}}}}return 0; }

LVDS(Low Voltage Differential Signaling)電平詳解

一、LVDS的定義與核心特性 LVDS&#xff08;低壓差分信號&#xff09;是一種 低功耗、高速、抗干擾 的差分信號傳輸技術&#xff0c;通過一對互補的電壓信號&#xff08;正負端差值&#xff09;傳遞數據。其核心特性包括&#xff1a; 電氣特性 電壓擺幅&#xff1a;差分電壓約…

【OpenFeign 面試專題】

OpenFeign 面試專題 OpenFeign 的核心原理OpenFeign 如何與 Ribbon、Hystrix 集成Ribbon的負載均衡策略如何自定義 OpenFeign 的請求編碼和響應解碼OpenFeign 如何傳遞請求頭&#xff08;Header&#xff09;信息OpenFeign 如何處理超時和重試OpenFeign 支持哪些 HTTP 客戶端實現…

Adobe Acrobat Pro setting

防火墻斷網組織彈窗 Adobe軟件突然彈窗“THIS APP HAS BEEN DISABLED”&#xff1f;別慌&#xff0c;幾步教你輕松解決&#xff01; 禁用代理 解決Adobe出現This unlicensed Photoshop app has been disabled.禁止使用 rules:- DOMAIN-KEYWORD,adobe,REJECT

搜索插入位置(js實現,LeetCode:35)

給定一個排序數組和一個目標值&#xff0c;在數組中找到目標值&#xff0c;并返回其索引。如果目標值不存在于數組中&#xff0c;返回它將會被按順序插入的位置。 請必須使用時間復雜度為 O(log n) 的算法。 示例 1: 輸入: nums [1,3,5,6], target 5 輸出: 2示例 2: 輸入…

5. 前后端實現文件上傳與解析

1. 說明 在實際開發中&#xff0c;比較常見的一個功能是需要在前端頁面中選擇系統中的某個文件上傳到服務器中進行解析&#xff0c;解析后的文件內容可以用來在服務器中當作參數&#xff0c;或者傳遞給其它組件使用&#xff0c;或者需要存儲到數據庫中。所以本文就提供一種方式…

《靈珠覺醒:從零到算法金仙的C++修煉》卷三·天劫試煉(32)萬劍歸宗破妖陣 - 最長遞增子序列(LIS)

《靈珠覺醒:從零到算法金仙的C++修煉》卷三天劫試煉(32)萬劍歸宗破妖陣 - 最長遞增子序列(LIS) 哪吒在數據修仙界中繼續他的修煉之旅。這一次,他來到了一片神秘的萬劍谷,谷中有一座巨大的萬劍歸宗劍陣,劍陣閃爍著神秘的光芒。谷口有一塊巨大的石碑,上面刻著一行文字:…

【redis】使用redis作為緩存時所注意事項

緩存更新策略 在 Redis 緩存中&#xff0c;緩存的更新策略主要有**定期生成&#xff08;定時更新&#xff09;和實時生成&#xff08;即時更新&#xff09;**兩種方式。不同的策略適用于不同的業務場景&#xff0c;涉及性能、數據一致性和系統負載等方面的權衡。 1. 定期生成&…

計算機網絡:計算機網絡的分類

按分布范圍分類&#xff1a;廣域網&#xff0c;城域網&#xff0c;局域網&#xff0c;個域網 按傳輸技術分類&#xff1a;廣播式網絡&#xff0c;點對點網絡 按拓撲結構分類&#xff1a;總線型&#xff0c;環形&#xff0c;星形&#xff0c;網狀 按傳輸介質分類&#xff1a;…

解決pip安裝uv時下載速度慢

驗證優化效果 方案 1&#xff1a;臨時使用國內鏡像源&#xff08;推薦&#xff09; pip install uv -i https://pypi.tuna.tsinghua.edu.cn/simple 速度提升&#xff1a;鏡像源服務器位于國內&#xff0c;帶寬充足&#xff0c;通常可達 1-10MB/s 支持源列表&#xff1a; # 清…

SpringCloud Alibaba——入門簡介

一、是什么 &#xff08;1&#xff09;誕生 2018.10.31&#xff0c;Spring Cloud Alibaba 正式入駐了 Spring Cloud 官方孵化器&#xff0c;并在 Maven 中央庫發布了第一個版本 &#xff08;2&#xff09;介紹 &#xff08;3&#xff09;&#xff1f;何為必須組件 二、能干嘛…

Python完全指南:從基礎到實踐的編程藝術

引言&#xff1a;數字時代的瑞士軍刀 在人工智能與大數據浪潮中&#xff0c;Python如同編程世界的"瑞士軍刀"&#xff0c;以其優雅的語法和強大的生態征服全球開發者。本文將從語言哲學到實戰應用&#xff0c;為您展開Python編程的全景畫卷&#xff0c;揭示這門語言…

Docker 運行 GPUStack 的詳細教程

GPUStack GPUStack 是一個用于運行 AI 模型的開源 GPU 集群管理器。它具有廣泛的硬件兼容性&#xff0c;支持多種品牌的 GPU&#xff0c;并能在 Apple MacBook、Windows PC 和 Linux 服務器上運行。GPUStack 支持各種 AI 模型&#xff0c;包括大型語言模型&#xff08;LLMs&am…