算法題(105):小貓爬山

審題:

本題需要我們找出將n個小貓放在有限重的纜車上運下山所需的最小纜車數

時間復雜度分析:本題的數據量小于等于18,所以我們在做好剪枝的前提下可以使用深度優先搜索解題

思路:

方法一:dfs

搜索策略:將小貓一個個的放入纜車中,有兩種放法:

第一種是放到當前已有纜車中,第二種是放到新的纜車中

剪枝策略:

剪枝1:可行性剪枝

我們需要在小貓重量+當前纜車中小貓總重小于等于限重時放入,若不滿足就剪枝

剪枝2:最優化剪枝

在我們已經搜索過的放法中,最小纜車數會被放到answer,若answer小于當前的纜車數c,那么說明該條路線已經不用搜索了,最優情況也就是等于answer。

剪枝3:優化搜索順序

優化1:先從體重較大的小貓開始放入,因為這樣可以更快搜索出較小的answer

優化2:先考慮已有的纜車放入,再考慮開新纜車,也是服務于剪枝2的

解題:

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 20;
int n, w;
int answer = N;
int c = 0;//當前車數
int cat[N], s[N];//cat負責記錄貓的體重,s記錄纜車當前負重

(1)main函數與compare函數

bool compare(int a,int b)//改變比較邏輯為降序
{return a > b;
}
int main()
{//錄入數據cin >> n >> w;for (int i = 1; i <= n; i++){cin >> cat[i];}//優化搜索順序sort(cat + 1, cat + n + 1, compare);dfs(1);//傳遞貓的索引cout << answer << endl;return 0;
}

這里我們進行剪枝3的優化1:先從較重的貓開始放入。

所以我們通過compare函數,自己實現大數據優先的降序sort

(2)dfs

void dfs(int pos)
{//剪枝:最優化搜索if (c >= answer){return;}//結束條件if (pos > n){answer = c;return;}//優先搜索不開新車情況for (int i = 1; i <= c; i++){//可行性剪枝if (cat[pos] + s[i] > w){continue;}s[i] += cat[pos];dfs(pos + 1);s[i] -= cat[pos];}//開新車情況c++;s[c] = cat[pos];dfs(pos + 1);s[c] = 0;c--;
}

結束條件:之所以可以直接讓c給到answer,是因為經過了剪枝最優化搜索的篩選,c一定是小于answer的,否則就被剪掉了

剪枝3:我們優先搜索不開新車的情況,所以把開新車情況放在for循環后,只有當所有舊的纜車都無法承載當前貓的體重時才會進入開新車的情況。

而所有的dfs搜索基本都涉及回退,有的是看情況回退,有的是一定回退,像這里這種搜索情況但是不記錄具體方法的就是一定回退,所以我們在dfs出來后要還原數據

P10483 小貓爬山 - 洛谷

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

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

相關文章

第十六章:Specialization and Overloading_《C++ Templates》notes

Specialization and Overloading 一、模板特化與重載的核心概念二、代碼實戰與測試用例三、關鍵知識點總結四、進階技巧五、實踐建議多選題設計題代碼測試說明 一、模板特化與重載的核心概念 函數模板重載 (Function Template Overloading) // 基礎模板 template<typename…

多協議兼容+高并發處理:EasyCVR如何破解AI安防規模化落地難題?

隨著AI技術在安防領域的深入應用&#xff0c;規模化部署面臨兩大核心挑戰&#xff1a;設備協議碎片化導致的接入壁壘與海量視頻流并發帶來的性能瓶頸。TSINGSEE青犀視頻的EasyCVR平臺通過“多協議兼容高并發處理”雙引擎驅動&#xff0c;結合云邊端協同架構與智能算法優化&…

IntelliJ IDEA 中 Git 高頻問題與操作詳解|新手避坑指南

標簽&#xff1a;IntelliJ IDEA Git操作, Git教程, 版本控制, 沖突解決, 分支管理 引言 你是否遇到過這些問題&#xff1f; 代碼提交后想撤銷怎么辦&#xff1f;合并分支時沖突不會解決&#xff1f;不小心把錯誤代碼推送到遠程倉庫&#xff1f; 本文針對 IntelliJ IDEA 中 Git …

【聊聊層次式架構設計:像搭樂高一樣構建軟件大廈】

文章目錄 聊聊層次式架構設計&#xff1a;像搭樂高一樣構建軟件大廈理論篇&#xff1a;層次式架構的“千層套路”最底層&#xff1a;基礎設施層——默默付出的“基石俠”數據訪問層&#xff1a;“數據快遞員”業務邏輯層&#xff1a;智慧的“大腦中樞”表示層&#xff1a;軟件的…

N列股票收盤價為起點的馬科維茨(Markowitz)均值—方差理論

1. 數據準備與收益率計算 輸入數據&#xff1a; 假設你有一個矩陣&#xff0c;每一列代表一只股票的歷史收盤價序列。每一行對應一個時間點的收盤價。 計算收益率&#xff1a; 馬科維茨理論要求使用資產的收益率而非價格。常用的收益率計算方法有對數收益率或簡單收益率。 2.…

Conda常用命令匯總(持續更新中)

原文章&#xff1a;安裝和使用Miniconda來管理Python環境-CSDN博客 一、Miniconda的使用 Miniconda沒有GUI界面&#xff0c;只能通過conda命令對Python環境和軟件包進行管理&#xff0c;所以這里主要介紹一下conda的常用命令。 1. Conda相關 (1)查詢conda版本 conda --vers…

Redis Cluster 詳解

Redis Cluster 詳解 1. 為什么需要 Redis Cluster&#xff1f; Redis 作為一個高性能的內存數據庫&#xff0c;在單機模式下可能會遇到以下問題&#xff1a; 單機容量受限&#xff1a;Redis 是基于內存存儲的&#xff0c;單機的內存資源有限&#xff0c;單實例的 Redis 只能…

利用 MATLAB/Simulink 建立完整的控制系統模型,并進行階躍響應和負載擾動響應仿真

-利用 MATLAB/Simulink 建立完整的控制系統模型,包括單一控制回路(電流、速度、位置)和整個系統的級聯模型 仿真任務包括驗證各回路的階躍響應、負載擾動響應等,確保系統在動態性能上滿足設計要求。 以下是在MATLAB/Simulink中建立完整控制系統模型(包含單一控制回路和級聯…

python基于spark的心臟病患分類及可視化(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 時代在飛速進步&#xff0c;每個行業都在努力發展現在先進技術&#xff0c;通過這些先進的技術來提高自己的水平和優勢&#xff0c;汽車數據分析平臺當然不能排除在外。本次我所開發的心臟病患分類及可視化系統是在實際應用和軟件工程的開發原理之上&#xff0c;運用Pyth…

3.milvus索引-HNSW

索引作用 加速大型數據集上的查詢。 向量字段&#xff0c;僅只能創建一個索引。 milvus支持的向量索引類型大部分使用 近似最近鄰搜索算法。ANNS該算法的核心不局限于返回最準確的結果&#xff0c;而是僅搜索目標的鄰居。ANNS通過在可接受的范圍內犧牲準確性提高檢索效率。 …

Python(學習二)

列表&#xff1a;[] 列表是可以容納不同類型的數據的 列表取&#xff1a; 列表切片&#xff1a;一次去獲取多個元素 第三個參數&#xff0c;設置跨度值&#xff1a; 列表倒序輸出 列表增&#xff1a; 列表后面添加元素&#xff1a; 切片&#xff1a;實現添加元素 任意位置…

【中文翻譯】第1章-The Algorithmic Foundations of Differential Privacy

為方便閱讀&#xff0c;故將《The Algorithmic Foundations of Differential Privacy》翻譯項目內容搬運至此&#xff1b; 教材原文地址&#xff1a;https://www.cis.upenn.edu/~aaroth/Papers/privacybook.pdf 中文翻譯版 Github 項目地址1&#xff1a;https://github.com/gu…

UI-TARS與Midscene.js自動化探索

結合 Midscene.js 和 UI-TARS 大模型 實現 UI 頁面自動化的可實施方案&#xff0c;涵蓋環境配置、核心流程、代碼示例及優化建議&#xff1a; 一、環境配置與工具集成 安裝 Midscene.js 方式一&#xff1a;通過 Chrome 插件快速安裝&#xff08;適用于瀏覽器自動化場景&#x…

Web開發-JS應用NodeJS原型鏈污染文件系統Express模塊數據庫通訊

知識點&#xff1a; 1、安全開發-NodeJS-開發環境&功能實現 2、安全開發-NodeJS-安全漏洞&案例分析 3、安全開發-NodeJS-特有漏洞 node.js就是專門運行javascript的一個應用程序&#xff0c;區別于以往用瀏覽器解析原生js代碼&#xff0c;node.js本身就可以解析執行js代…

Spring AOP 核心概念與實踐指南

第一章&#xff1a;AOP 核心概念與基礎應用 1.1 AOP 核心思想 ?面向切面編程&#xff1a;通過橫向抽取機制解決代碼重復問題&#xff08;如日志、事務、安全等&#xff09;?核心優勢&#xff1a;不修改源代碼增強功能&#xff0c;提高代碼復用性和可維護性 1.2 基礎環境搭…

Flutter使用自簽證書打包ipa

在 Flutter 中使用自簽證書打包 IPA 文件&#xff0c;可以通過以下步驟完成&#xff1a; 1. 準備自簽證書 方式一 生成自簽證書&#xff1a; 打開 鑰匙串訪問 應用。選擇 證書助理 > 創建證書。按照提示填寫證書信息&#xff0c;選擇證書類型為 代碼簽名&#xff0c;并保存…

基于STM32的機器人控制系統設計方案

一、系統概述 該機器人控制系統以STM32微控制器為核心,旨在實現對機器人的運動控制、傳感器數據采集與處理、任務調度以及人機交互等功能。適用于多種類型的移動機器人,如輪式機器人、履帶式機器人等,可應用于室內導航、環境監測、物流搬運等場景。 二、硬件設計 STM32微控…

【leetcode hot 100 51】N皇后

解法一&#xff1a;&#xff08;基于集合的回溯&#xff09;我們從第一行開始尋找&#xff0c;找每一行皇后應該放在第幾列。每次找到都用Set記錄已經用過的列和對角&#xff0c;其中從左到右向下的對角&#xff08;行-列相同&#xff09;&#xff0c;右到左向下的對角&#xf…

藍橋刷題note9(分發餅干,最長回文子串)

1.分發餅干 假設你是一位很棒的家長&#xff0c;想要給你的孩子們一些小餅干。但是&#xff0c;每個孩子最多只能給一塊餅干。 對每個孩子 i&#xff0c;都有一個胃口值 g[i]&#xff0c;這是能讓孩子們滿足胃口的餅干的最小尺寸&#xff1b;并且每塊餅干 j&#xff0c;都有…

面試常問系列(一)-神經網絡參數初始化

一、背景 說到參數初始化&#xff0c;先提一下大家常見的兩個概念梯度消失和梯度爆炸。 &#xff08;一&#xff09;、梯度消失&#xff1a;深層網絡的“靜默殺手” 定義&#xff1a; 在反向傳播過程中&#xff0c;梯度值隨著網絡層數增加呈指數級衰減&#xff0c;最終趨近…