【藍橋杯】搜索算法:剪枝技巧+記憶化搜索

1. 可行性剪枝應用

1.1. 題目

題目描述
給定一個正整數n和一個正整數目標值target,以及一個由不同正整數組成的數組nums。要求從nums中選出若干個數,每個數可以被選多次,使得這些數的和恰好等于target。問有多少種不同的組合方式?

輸入

  • 第一行:n和target,表示數組長度和目標值

  • 第二行:n個不同的正整數,表示數組nums

輸出

  • 一個整數,表示不同的組合方式數量

示例
輸入:

3 4
1 2 3

輸出:

4

解釋:
組合方式為:
1+1+1+1
1+1+2
1+3
2+2

限制條件

  • 1 ≤ n ≤ 20

  • 1 ≤ target ≤ 1000

  • 1 ≤ nums[i] ≤ 1000

1.2. 分析

本題主要考察可行性剪枝在回溯算法中的應用。我們需要在搜索過程中及時排除不可能達到目標的分支,從而減少不必要的計算。

1??排序數組:首先將數組排序,這樣可以在搜索時按照一定順序進行,便于剪枝

2??回溯搜索:使用回溯法嘗試所有可能的組合

3??可行性剪枝

  • 當前和超過target時,立即返回

  • 從當前元素開始嘗試,避免重復組合(如1+2和2+1被視為相同)

  • 剩余和無法用當前或更大的數達到時,提前終止

1.3. 代碼

def combinationSum(nums, target):"""計算可以達到目標值的組合數量:param nums: 正整數數組:param target: 目標值:return: 組合數量"""nums.sort()  # 排序便于剪枝result = 0  # 記錄結果數量def backtrack(start, remaining):"""回溯函數:param start: 當前開始位置,避免重復組合:param remaining: 剩余需要湊的值"""nonlocal result# 可行性剪枝1:剩余值為0,找到有效組合if remaining == 0:result += 1return# 可行性剪枝2:從start開始,避免重復組合for i in range(start, len(nums)):num = nums[i]# 可行性剪枝3:當前數已經大于剩余值,后面更大的數更不可能,直接終止if num > remaining:break# 遞歸嘗試選擇當前數backtrack(i, remaining - num)backtrack(0, target)return result# 讀取輸入
n, target = m

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

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

相關文章

Uniapp 集成極光推送(JPush)完整指南

文章目錄 前言一、準備工作1. 注冊極光開發者賬號2. 創建應用3. Uniapp項目準備 二、集成極光推送插件方法一:使用UniPush(推薦)方法二:手動集成極光推送SDK 三、配置原生平臺參數四、核心功能實現1. 獲取RegistrationID2. 設置別…

Linux中進程

一、認識進程 進程(PCB)內核數據結構(task_struct)程序的代碼和數據 每一個進程都有其獨立的task_struct,OS對眾多的task_struct進行管理,如何管理?先描述再組織,所有運?在系統?的進程都以task_struct鏈表的形式存在內核?,而…

國外的AI工具

一 OpenAI : 💡 總覽: 名稱全稱/代號簡介GPT-4o“o” omniOpenAI 最新的旗艦多模態模型(文字、圖像、音頻三模態),比 GPT-4 更強、更快、更便宜。GPT-4o-mini精簡版 GPT-4o輕量級版本,推測為性…

企業級Java開發工具MyEclipse v2025.1——支持AI編碼輔助

MyEclipse一次性提供了巨量的Eclipse插件庫,無需學習任何新的開發語言和工具,便可在一體化的IDE下進行Java EE、Web和PhoneGap移動應用的開發;強大的智能代碼補齊功能,讓企業開發化繁為簡。 立即獲取MyEclipse v2025.1正式版 具…

按鍵長按代碼

這些代碼都存放在定時器中斷中。中斷為100ms中斷一次。 數據判斷,看的懂就看吧

在 macOS 上連接 PostgreSQL 數據庫(pgAdmin、DBeaver)

在 macOS 上連接 PostgreSQL 數據庫 pgAdmin 官方提供的圖形化管理工具,支持 macOS。 下載地址:https://www.pgadmin.org/ pgAdmin 4 是對 pgAdmin 的完全重寫,使用 Python、ReactJs 和 Javascript 構建。一個用 Electron 編寫的桌面運行時…

FTP協議和win server2022安裝ftp

FTP協議簡介 FTP(File Transfer Protocol,文件傳輸協議)是一種用于在網絡上的計算機之間傳輸文件的標準網絡協議。它被廣泛應用于服務器與客戶端之間的文件上傳、下載以及管理操作。FTP支持多種文件類型和結構,并提供了相對簡單的…

人工智能——AdaBoost算法

目錄 摘要 13 AdaBoost算法 13.1 本章工作任務 13.2 本章技能目標 13.3 本章簡介 13.4 編程實戰 13.5 本章總結 13.6 本章作業 本章已完結! 摘要 本章實現的工作是:首先采用Python語言讀取數據并構造訓練集和測試集。然后建立AdaBoost模型,利用訓練集訓練該模型,…

DFS 藍橋杯

最大數字 問題描述 給定一個正整數 NN 。你可以對 NN 的任意一位數字執行任意次以下 2 種操 作: 將該位數字加 1 。如果該位數字已經是 9 , 加 1 之后變成 0 。 將該位數字減 1 。如果該位數字已經是 0 , 減 1 之后變成 9 。 你現在總共可以執行 1 號操作不超過 A…

【開發經驗】調試OpenBMC Redfish EventService功能

EventService功能是Redfish規范中定義的一種事件日志的發送方式。用戶可以設置訂閱者信息(通常是一個web服務器),當產生事件日志時,OpenBMC可以根據用戶設置的訂閱者信息與對日志的篩選設置,將事件日志發送到訂閱者。 相比于傳統的SNMPTrap日…

中斷嵌套、中斷咬尾、中斷晚到

中斷咬尾(Tail-Chaining)是一種通過減少上下文切換開銷來實現中斷連續響應的高效機制,其核心在于避免重復的出棧和入棧操作,從而顯著降低中斷延遲。以下是具體原理及實現方式: 中斷咬尾的運作機制 當多個中斷請求連續…

Vue2下載二進制文件

后端: controller: GetMapping(value "/get-import-template")public void problemTemplate(HttpServletRequest request, HttpServletResponse response) throws Exception {iUserService.problemTemplate(request, response);} service: void probl…

Ubuntu小練習

文章目錄 一、遠程連接1、通過putty連接2、查看putty運行狀態3、通過Puuty遠程登錄Ubuntu4、添加新用戶查看是否添加成功 5、用新用戶登錄遠程Ubuntu6、使用VNC遠程登錄樹莓派 二、虛擬機上talk聊天三、Opencv1、簡單安裝版(適合新手安裝)2、打開VScode特…

996引擎-疑難雜癥:Ctrl + F9 編輯好的UI進入游戲查看卻是歪的

Ctrl F9 編輯好UI后,進入游戲查看卻是歪的。 檢查Ctrl F10 是否有做過編輯。可以找到對應界面執行【清空】

WinForm真入門(5)——控件的基類Control

控件的基類–Control 用于 Windows 窗體應用程序的控件都派生自 Control類并繼承了許多通用成員,這些成員都是平時使用控件的過程最常用到的。無論要學習哪個控件的使用,都離不開這些基本成員,尤其是一些公共屬性。由于 Conlrol 類規范了控件的基本特征…

RAG(檢索增強生成)系統,提示詞(Prompt)表現測試(數據說話)

在RAG(檢索增強生成)系統中,評價提示詞(Prompt)設計是否優秀,必須通過量化測試數據來驗證,而非主觀判斷。以下是系統化的評估方法、測試指標和具體實現方案: 一、提示詞優秀的核心標準 優秀的提示詞應顯著提升以下指標: 維度量化指標測試方法事實一致性Faithfulness …

Appium的學習總結-Inspector參數設置和界面使用(5)

環境搭建好后,怎么使用呢? 環境這里使用的是: Appium的Server端GUI 22版本 Inspector需要單獨下載安裝,GUI里并沒有集成。 (使用Appium v1.22.0,查看元素信息需要另外安裝下載Appium Inspector) 操作&…

I/O進程3

day3 五、進程 7.函數接口 7.1創建子進程 pid_t fork(void);功能:創建子進程返回值:成功:在父進程中:返回子進程的進程號 >0 在子進程中:返回值為0; 失敗:-1并設置errno 特點 1.子進程幾乎…

k8s 1.24.17版本部署(使用Flannel插件)

1.k8s集群環境準備 推薦閱讀: https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 1.1 環境準備 環境準備:硬件配置: 2core 4GB磁盤: 50GB操作系統: Ubuntu 22.04.04 LTSIP和主機名:10.0.0.231 master23110.0.0.232 worker23210.0…

網絡編程—TCP/IP模型(UDP協議與自定義協議)

上篇文章: 網絡編程—Socket套接字(TCP)https://blog.csdn.net/sniper_fandc/article/details/146923783?fromshareblogdetail&sharetypeblogdetail&sharerId146923783&sharereferPC&sharesourcesniper_fandc&sharefro…