【力扣刷題|第十七天】0-1 背包 完全背包

在這里插入圖片描述

目標和

力扣題目網址:目標和

這道題我們先用回溯的思想來做。首先我們設正數和為S,數組和為N,目標值為T,那么S-(N-S)=T化簡之后可以得S=(T+N)/2即選擇的正數個數為偶數,而且N+T也為偶數,那么第一個判斷條件我們就有了,并且問題可以轉換為,背包容量為(T+N)/2,有幾種選擇正數的方式能夠填滿背包,回溯思想代碼如下,主要還是選或者不選,這里我們仍然需要用記憶化搜索,不然會超時

package day17;import java.util.Arrays;// p
// s-p
// p-(s-p)=target
// p = (s+target)/2
public class id_494_1 {public int[] NUMS;private int[][] memo;public int findTargetSumWays(int[] nums, int target) {target += Arrays.stream(nums).sum();if(target < 0 || target % 2 != 0) return 0;target /= 2;int n = nums.length;memo = new int[n][target + 1];for (int[] row : memo) {Arrays.fill(row, -1);}this.NUMS = nums;return dfs(NUMS.length - 1, target);}public int dfs(int i,int c){if(i < 0){return c == 0 ? 1 : 0;}if(memo[i][c] != -1) return memo[i][c];if(c < NUMS[i]){return memo[i][c] = dfs(i-1,c);}return memo[i][c] = dfs(i-1,c) + dfs(i-1,c-NUMS[i]);}
}

接下來我們用遞推的方式來做也就是用循環和二維數組來代替遞歸,這道題的初始化也需要我們討論,我們只需要初始化0 0處為1,因為背包容量為0的時候0個物品有1種添加方式,也就是不放物品。

package day17;import java.util.Arrays;public class id_494_2 {private int[][] f;public int findTargetSumWays(int[] nums, int target) {target += Arrays.stream(nums).sum();if(target < 0 || target % 2 != 0) return 0;target /= 2;int n = nums.length;f = new int[n+1][target + 1];f[0][0] = 1;for(int i = 0; i < n; i++){for(int j = 0; j < target+1; j++){if(j < nums[i]){f[i+1][j] = f[i][j];}else {f[i+1][j] = f[i][j] + f[i][j - nums[i]];}}}return f[n][target];}
}

簡化為一個數組的時候,我們需要倒序遍歷背包,具體解釋可以看靈茶山艾府的視頻背包問題:遍歷順序

在這里插入圖片描述

package day17;import java.util.Arrays;public class id_494_3 {private int[] f;public int findTargetSumWays(int[] nums, int target) {target += Arrays.stream(nums).sum();if(target < 0 || target % 2 != 0) return 0;target /= 2;int n = nums.length;f = new int[target + 1];f[0] = 1;for(int i : nums){for(int j = 0; j < target + 1; j++){f[j] += f[j - i];}}return f[target];}
}

零錢兌換

力扣題目網址:零錢兌換

這道題和上一道差不多,但是這道題硬幣可以重復選擇。我們就不用回溯的思想來寫了,直接看二維數組遞推的方法。這道題需要我只有在00的地方初始化為0,其他地方初始化為int的最大值,但是在java中這樣會越界,主播我初始化為20000,這樣在最后如果找不到符合的,那么f[n][amount]的值就是我們初始化的值

package day17;import java.util.Arrays;// 完全背包
public class id_LCR103_2 {private int[][] memo;public int coinChange(int[] coins, int amount) {int n = coins.length;memo = new int[n + 1][amount + 1];for (int[] ints : memo) {Arrays.fill(ints, 20000);}memo[0][0] = 0;for(int i = 0; i < n; i++){for(int j = 0; j <= amount; j++){if(j < coins[i]){memo[i+1][j] = memo[i][j];}else {memo[i+1][j] = Math.min(memo[i][j], memo[i+1][j - coins[i]] + 1);}}}return memo[n][amount] < 20000 ? memo[n][amount] : -1;}}

我們繼續簡化為一維數組,這時候遍歷循序就需要變為正序

package day17;import java.util.Arrays;public class id_LCR103_3 {public int coinChange(int[] coins, int amount) {int n = coins.length;int[] f = new int[amount + 1];Arrays.fill(f, 20000);f[0] = 0;for(int x : coins){for(int j = x; j <= amount; j++){f[j] = Math.min(f[j], f[j - x] + 1);}}return f[amount] < 20000 ? f[amount] : -1;}
}

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

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

相關文章

【Linux網絡與網絡編程】01.初識網絡

一、計算機網絡的發展歷史 計算機是人的工具&#xff0c;人要協同工作&#xff0c;注定了網絡的產生是必然的。 二、協議 計算機之間的傳輸媒介是光信號和電信號&#xff0c;通過 "頻率" 和 "強弱" 來表示 0 和 1 這樣的信息&#xff0c;要想傳遞各種不同…

使用 Python 進行鏈上數據監控:讓區塊鏈數據觸手可及

使用 Python 進行鏈上數據監控:讓區塊鏈數據觸手可及 區塊鏈技術正以前所未有的速度改變著各行各業,特別是在金融、供應鏈、物聯網和智能合約等領域的應用,已經成為了一種新常態。然而,隨著區塊鏈網絡的快速擴展和去中心化特性的不斷強化,數據的可視化與監控變得愈發重要…

【SMBIOS數據塊類型列表】

SMBIOS數據塊類型列表 SMBIOS數據塊類型列表**SMBIOS 數據塊類型列表****如何查看實際的 SMBIOS 數據塊&#xff1f;****總結** SMBIOS數據塊類型列表 在 SMBIOS&#xff08;System Management BIOS&#xff09;中&#xff0c;Type 是用來標識不同類型的數據塊的。每種類型對應…

【測試】每日3道面試題 3/30

每日更新&#xff0c;建議關注收藏點贊。 白盒測試邏輯覆蓋標準&#xff1f;哪種覆蓋標準覆蓋率最高&#xff1f; 5種。語句覆蓋、分支/判定覆蓋、條件覆蓋、條件組合覆蓋【覆蓋率最高&#xff0c;所有可能條件組合都驗證】、路徑覆蓋【理論上最高&#xff0c;但實際很難實現】…

NFS掛載異常排查記錄

互相PING服務器看是否通&#xff1b;在ubuntu下看下服務器是否正常運行。導出目錄是否導出了。最后發現在掛載目錄的地方目錄路徑和后面沒有加空格。

1--當「窮舉」成為藝術:CTF暴力破解漏洞技術從入門到入刑指南(知識點講解版)

當「窮舉」成為藝術&#xff1a;CTF暴力破解漏洞技術從入門到入刑指南 引言&#xff1a;論暴力破解的哲學意義 “世界上本沒有漏洞&#xff0c;密碼設得簡單了&#xff0c;便成了漏洞。” —— 魯迅&#xff08;并沒有說過&#xff09; 想象你是個不會撬鎖的小偷&#xff0c;面…

Java實戰:實現用戶的登錄注冊功能

系列文章目錄 Java文件 I/O流的操作實戰和高級UI組件和事件監聽的綜合 文章目錄 系列文章目錄前言一、大致流程思路分析&#xff1a;二、定義用戶類&#xff1a;三、服務層的實現&#xff1a; 1.保護用戶數據功能的實現2.登錄操作的實現 四、實現用戶的注冊界面&#xff1a; 大…

SQLAlchemy 支持特殊字符

postgresql 實踐 pydantic 實踐&#xff08;一&#xff09;基礎 pydantic 實踐&#xff08;二&#xff09;數據校驗 SQLAlchemy 介紹與實踐 SQLAlchemy 支持特殊字符 SQLAlchemy 支持特殊字符 1. 字符集介紹分析2. MySQL 支持特殊字符2.1. 更新 MySQL 字符集為 utf8mb42.2 更新…

如何看待職場中的“向上管理”

向上管理的本質,是提供一份更精確的人力產品說明書, 利用市場的邏輯,引導領導,按照你的心意,使用你這款產品。 公司獲得更高的產出,領導獲得更多的成果,你獲得了自由支配的時間, 這是一場正和博弈。 ? 圖片來源:網絡 (1)具體案例: 把自己當成一款產品,使用者…

AIOHTTP

文章目錄 AIOHTTP主要特點庫安裝在一個命令中安裝所有加速 入門客戶端示例服務器示例&#xff1a; 開發模式aiohttp 3 有什么新功能&#xff1f;依賴關系 客戶端快速入門發起請求在 URL 中傳遞參數響應內容和狀態碼二進制響應內容JSON 請求 注意JSON 響應內容流式響應內容更復雜…

JavaFX基礎- Button 的基本使用

說明 本文記錄一下對Button的基本使用&#xff0c;包括但不限于 樣式的設置&#xff0c;事件的監聽等。 按鈕樣式的設置 方式一 &#xff1a; Java代碼的方式 // 創建一個按鈕Button button new Button("按鈕");// 設置按鈕的位置button.setLayoutX(50);button.set…

DeepSeek-R1國產大模型實戰:從私有化部署到內網穿透遠程使用全攻略

文章目錄 前言1. 安裝Ollama2. 安裝DeepSeek-r1模型3. 安裝圖形化界面3.1 Windows系統安裝Docker3.2 Docker部署Open WebUI3.3 添加Deepseek模型 4. 安裝內網穿透工具5. 配置固定公網地址 前言 最近&#xff0c;國產AI界的黑馬——Deepseek&#xff0c;簡直火得一塌糊涂。不過…

openwrt24.10.0版本上安裝istoreOS的屏幕監控插件

lcdsimple 插件支持在軟路由下面顯示統計信息到 HDMI 或者 VGA 上。 手動安裝方法&#xff1a; 保證 quickstart 版本大于 0.9.7 安裝 lcdsimple 具體方法&#xff1a; opkg update opkg install quickstart opkg install lcdsimple 手動下載 QUICKSTART 跟 LCD SIMPLE&…

卷積神經網絡 - ResNet(殘差網絡)

殘差網絡(Residual Network&#xff0c;ResNet)通過給非線性的卷積層增加直連邊 (Shortcut Connection)(也稱為殘差連接(Residual Connection))的方式來提高信息的傳播效率。 這是一種特殊的深度神經網絡結構&#xff0c;由 Kaiming He 等人在 2015 年提出&#xff0c;目的是解…

質因數個數--歐拉函數中統計純素數

和互質數不同&#xff0c;這里統計的是純素數部分 就是x/i那一部分 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<ll,int> PII; int n,m,k; ll eular(ll x) { ll an0;ll px;for(ll i2;i*i<x;i){if(x%i…

2025年3月電子學會c++五級真題

結繩 #include <bits/stdc.h> using namespace std;int n,a[10010];int main() {cin>>n;for(int i 0;i<n;i){cin>>a[i];}sort(a0,an);//將a數組從小到大排序double sum 0;for(int i 0;i<n;i){sum (suma[i])/2;}cout<<(int)sum;return 0; } 最…

用Nginx實現負載均衡與高可用架構(整合Keepalived)

前言 在分布式架構中&#xff0c;負載均衡和高可用是保障系統穩定性的兩大核心能力。本文將深入講解如何通過Nginx實現七層負載均衡&#xff0c;并結合Keepalived構建無單點故障的高可用架構。文末附完整配置模板&#xff01; 一、Nginx負載均衡實現方案 1. 核心原理 Nginx通…

springBoot與ElementUI配合上傳文件

以下是使用Vue CLI創建的Vue項目&#xff0c;結合Element UI來實現文件上傳功能的完整示例。 步驟 創建Vue項目&#xff1a;確保你已經安裝了Vue CLI&#xff0c;若未安裝&#xff0c;可使用以下命令安裝&#xff1a; npm install -g vue/cli然后創建一個新的Vue項目&#x…

黑盒測試的測試用例構成的八點要素

測試用例: 是為測試項目而設計的執行文檔 作用&#xff1a; 防止漏測實施測試的標準 編寫格式&#xff1a; 用例編號:項目 模塊 編號用例標題:預期結果(測試點)模塊/項目:所屬項目或模塊優先級:表示用例的重要程度或者影響力P0~p4(P0最高)前置條件:要執行此條用例&#xf…

藍橋刷題note11(好數)

1&#xff0c;好數 一個整數如果按從低位到高位的順序&#xff0c;奇數位 (個位、百位、萬位 ?? ) 上的數字是奇數&#xff0c;偶數位 (十位、千位、十萬位 ?? ) 上的數字是偶數&#xff0c;我們就稱之為 “好數”。 給定一個正整數 NN&#xff0c;請計算從 1 到 NN 一共…