C++:背包問題習題

1. 貨幣系統

1371. 貨幣系統 - AcWing題庫

給定?V?種貨幣(單位:元),每種貨幣使用的次數不限。

不同種類的貨幣,面值可能是相同的。

現在,要你用這?V?種貨幣湊出?N?元錢,請問共有多少種不同的湊法。

解題思路

我們兩層循環分別枚舉到第i種物品了,價值為j

如果枚舉的價值大于當前枚舉物品的價值就將f[i][j]的值賦為f[i][j-w[i]].這個值記錄用w[i]湊到j的方法數量

不選的方法與f[i-1][j]的值相同。即不用w[i]湊到j的方法

AC代碼
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>using namespace std;int v,n;
long long w[30];
long long f[30][10010];//前i種物品選擇價值為j的方案數
int main()
{scanf("%d%d",&v,&n);for(int i=1;i<=v;i++){scanf("%d",&w[i]);}f[0][0]=1;for(int i=1;i<=v;i++){for(int j=0;j<=n;j++){if(j>=w[i])//選了{f[i][j]=f[i][j-w[i]];//湊f[i][j-w[i]](即少選一次w[i]的方法) 有幾個方法,就是用w[i] 來湊到j的方法}//沒選f[i][j]+=f[i-1][j];//加上沒有這個i的方法,即不用w[i]來湊到j的方法}}printf("%lld",f[v][n]);return 0;
}

2. 01背包

2. 01背包問題 - AcWing題庫

有?N件物品和一個容量是?V?的背包。每件物品只能使用一次。

第?i?件物品的體積是?vi,價值是?wi。

求解將哪些物品裝入背包,可使這些物品的總體積不超過背包容量,且總價值最大。
輸出最大價值。

?解題思路

兩層循環分別來枚舉,到第i個物品,體積不小于j

如果j小于v[i](v這個數組用來記錄i個物品的體積,w數組用來記錄價值)那只能不拿,價值就是不選i體積為j的價值

如果不小于就可以選擇拿還是不拿,將拿了第i個物品體積才到j與不拿這個物品體積就到j的價值進行比較取較大值

AC代碼
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int N, V;
int v[1010];
int w[1010];
int f[1010][1010];//前i件物品中,尋找不超過j個體積的最大價值
int main()
{scanf("%d%d", &N, &V);for (int i = 1; i <= N; i++){scanf("%d%d", &v[i], &w[i]);}for(int i=1;i<=N;i++)//前{for(int j=0;j<=V;j++)//體積{if(j<v[i])//不能拿{f[i][j]=f[i-1][j];//與沒i是一樣的,取值為不選第i件物品體積為j的最大價值}else//可以拿{f[i][j]=max(f[i-1][j-v[i]]+w[i],f[i-1][j]);//比較不拿第i件物品體積達到j與拿了第i件物品體積達到j誰更大}}}printf("%d\n", f[N][V]);return 0;
}

?3. 完全背包

有?N?種物品和一個容量是?V?的背包,每種物品都有無限件可用。

第?i 種物品的體積是?vi,價值是?wi。

求解將哪些物品裝入背包,可使這些物品的總體積不超過背包容量,且總價值最大。
輸出最大價值。

解題思路

與01背包不同的是完全背包的每一種都可以無限選擇,所以它選擇第i個不用使i-1后再統計j-v[i],因為之前可能使用過i了沒使用(或使用了不如不用)那f[i][j-v[i]]也在之前初始化為了f[i-1][j-v[i]]

AC代碼
#include<iostream>
#include<cstring>
#include<cstdio>using namespace std;int N,V;
int v[1010];
int w[1010];int f[1010][1010];int main()
{scanf("%d%d",&N,&V);for(int i=1;i<=N;i++){scanf("%d %d",&v[i],&w[i]);}for(int i=1;i<=N;i++)//枚舉第i件物品{for(int j=0;j<=V;j++){if(j<v[i])//不能放{f[i][j]=f[i-1][j];//統計沒放的}else//能放f[i][j]=max(f[i-1][j],f[i][j-v[i]]+w[i]);//沒放這一次的價值,即選了k-1次i物品的價值}}cout<<f[N][V]<<endl;return 0;
}

4. 砝碼稱重

你有一架天平和?N?個砝碼,這?N?個砝碼重量依次是?W1,W2,???,WNW1,W2,···,WN。

請你計算一共可以稱出多少種不同的正整數重量?

注意砝碼可以放在天平兩邊。

?解題思路

兩層循環,枚舉第i個砝碼,能否湊成j的重量,存儲值為布爾類型

一個砝碼有三種情況,放在天平右邊(看當前重量減去這個砝碼重量是否能湊成(取絕對值,因為這邊超過另一半,超過的重量也成立)),放在左邊(同上不過是加上)與不放(看上一個可不可以即可),只要有一種可以就能湊成。

將0個砝碼,0重量初始化為true,但最后累計時不能算上,因為只統計正整數,0不是

?AC代碼
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>using namespace std;int N;
int v[110];bool f[110][200010];int main()
{scanf("%d",&N);int sum=0;for(int i=1;i<=N;i++){scanf("%d",&v[i]);sum+=v[i];}f[0][0]=true;//0肯定能湊出來,什么也不放就行for(int i=1;i<=N;i++)//第i個{for(int j=0;j<=sum;j++)//湊j的重量,能否湊成{//1如果不放就能達到j這個重量那肯定可以,2如果放到左邊看不放之前有沒有這個重量f[i][j]=f[i-1][j]|f[i-1][j+v[i]]|f[i-1][abs(j-v[i])];//不放和放左邊和放右邊}}int res=0;for(int i=1;i<=sum;i++)//i不能從0開始因為0不是正整數{if(f[N][i])res++;}printf("%d",res);return 0;
}

這篇就到這里啦(づ ̄3 ̄)づ╭?? ~(?′?‵?)I L???????

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

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

相關文章

IT工具 | node.js 進程管理工具 PM2 大升級!支持 Bun.js

P(rocess)M(anager)2 是一個 node.js 下的進程管理器&#xff0c;內置負載均衡&#xff0c;支持應用自動重啟&#xff0c;常用于生產環境運行 node.js 應用&#xff0c;非常好用&#x1f44d; &#x1f33c;概述 2025-03-15日&#xff0c;PM2發布最新版本v6.0.5&#xff0c;這…

2025年01月02日浙江鼎永前端面試

目錄 webpack 和 vite 區別react fiber 架構vue diff 算法react diff 算法hooks 源碼垂直水平布局項目介紹單點登錄大文件上傳微前端 1. webpack 和 vite 區別 Webpack 和 Vite 是兩種不同的前端構建工具&#xff0c;它們在設計理念、性能表現和使用場景上存在顯著差異。以下…

1.企業級AD活動目錄核心解析:架構、組件與集成實踐

在當今數字化時代&#xff0c;企業級網絡環境日益復雜&#xff0c;高效、安全的資源管理和用戶認證成為企業 IT 運營的關鍵。AD&#xff08;Active Directory&#xff09;活動目錄作為微軟 Windows 系列服務器中的重要目錄服務&#xff0c;為企業級網絡管理提供了強大的解決方案…

【數據分享】2014-2024年我國各城市逐年空氣質量指數(AQI)數據

空氣質量指數&#xff08;AQI&#xff09;是一個衡量空氣污染程度的綜合指標&#xff0c;它并不直接表示具體污染物的濃度值&#xff0c;而是基于多種污染物的濃度進行的綜合評價&#xff0c;具體基于六種主要污染物的濃度&#xff1a;PM2.5、PM10、SO?、NO?、O?和CO。AQI是…

【C++】深入理解list迭代器的設計與實現

深入理解list迭代器的設計與實現 引言1、鏈表基礎結構2、鏈表迭代器的封裝2.1 初步封裝迭代器類2.2 引入const迭代器2.2.1 參考STL源代碼2.2.2 完善迭代器 3、迭代器實現機制結語 引言 在STL容器中&#xff0c;list作為經典的雙向鏈表容器&#xff0c;其迭代器設計體現了C模板編…

C語言基礎系列【27】typedef

博主介紹&#xff1a;程序喵大人 35- 資深C/C/Rust/Android/iOS客戶端開發10年大廠工作經驗嵌入式/人工智能/自動駕駛/音視頻/游戲開發入門級選手《C20高級編程》《C23高級編程》等多本書籍著譯者更多原創精品文章&#xff0c;首發gzh&#xff0c;見文末&#x1f447;&#x1f…

【CXX-Qt】2.5 繼承

某些 Qt API 要求你從抽象基類中重寫某些方法&#xff0c;例如 QAbstractItemModel。 為了支持直接從 Rust 中創建這樣的子類&#xff0c;CXX-Qt 提供了多種輔助工具。 某些基類可能需要特殊的構造參數。這可以通過使用自定義構造函數來實現。 訪問基類方法 要在 Rust 中訪…

磁盤清理工具-TreeSize Free介紹

TreeSizeFree是一個磁盤空間管理工具&#xff0c;主要用于分析磁盤使用情況&#xff0c;幫助用戶找到占用空間大的文件和文件夾: 特點&#xff1a;按大小排序&#xff1a;快速找到占用空間最大的文件或文件夾 一般可以刪除: 掃描 C:\Users\XXX\AppData\Local\Temp 或 C:\Window…

OpenCV中距離公式

一、各類距離公式總結 常見距離公式 歐氏距離&#xff1a; 曼哈頓距離&#xff08;L1&#xff09;?&#xff1a; 切比雪夫距離&#xff08;Chessboard&#xff09;?&#xff1a; 1、點與點距離(歐氏距離) ?二維空間? 設兩點坐標為 P1(x1,y1)、P2(x2,y2)&#xff0c;其距離…

Vue.js 模板語法全解析:從基礎到實戰應用

引言 在 Vue.js 的開發體系中&#xff0c;模板語法是構建用戶界面的核心要素&#xff0c;它讓開發者能夠高效地將數據與 DOM 進行綁定&#xff0c;實現動態交互效果。通過對《Vue.js 快速入門實戰》中關于 Vue 項目部署章節&#xff08;實際圍繞 Vue 模板語法展開&#xff09;…

論文筆記(七十三)Gemini Robotics: Bringing AI into the Physical World

Gemini Robotics: Bringing AI into the Physical World 文章概括1. 引言2. Gemini 2.0的具身推理2.1. 具身推理問答&#xff08;ERQA&#xff09;基準測試2.2. Gemini 2.0的具身推理能力2.3. Gemini 2.0支持零樣本和少樣本機器人控制 3. 使用 Gemini Robotics 執行機器人動作3…

centos7搭建postgresql12主從

主從搭建 192.168.159.101 node1 主庫&#xff08;讀寫&#xff09; 192.168.159.102 node2 備庫&#xff08;只讀&#xff09; 兩臺機器首先安裝postgrsql 主庫 postgres用戶操作&#xff1a; 修改postgresql.conf # 在文件中修改(此配置僅用于遠程訪問, 流復制后續還有額外…

嵌入式基礎知識學習:SPI通信協議是什么?

SPI&#xff08;Serial Peripheral Interface&#xff09;是串行外設接口的縮寫&#xff0c;是一種廣泛應用于嵌入式系統的高速同步串行通信協議&#xff0c;由摩托羅拉公司于20世紀80年代提出。以下是其核心要點&#xff1a; 一、SPI的核心定義與特點 基本特性 全雙工同步通信…

996引擎-接口測試:背包

996引擎-接口測試:背包 背包測試NPC參考資料背包測試NPC CONSTANT = require("Envir/QuestDiary/constant/CONSTANT.lua"); MsgUtil = require("Envir/QuestDiary/utils/996/MsgUtil.lua");

vulnhub靶場之【hack-me-please靶機】

前言 靶機&#xff1a;billu_b0x2靶機&#xff0c;IP地址為192.168.10.8 攻擊&#xff1a;kali&#xff0c;IP地址為192.168.10.6 靶機和攻擊機都采用VMware虛擬機&#xff0c;都采用橋接網卡模式 文章涉及的靶機及工具&#xff0c;都可以自行訪問官網或者項目地址進行獲取&…

機器學習——KNN模型評價

一、主要函數 sklearn.metrics.accuracy_score() 是 scikit-learn 中用于計算分類模型準確率的函數&#xff0c;適用于評估分類任務的整體性能。 1、核心功能 作用&#xff1a;計算模型預測的準確率&#xff0c;即正確分類的樣本數占總樣本數的比例。公式&#xff1a;Accurac…

美國國家數據浮標中心(NDBC)

No.大劍師精品GIS教程推薦0地圖渲染基礎- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】 1Openlayers 【入門教程】 - 【源代碼示例 300】 2Leaflet 【入門教程】 - 【源代碼圖文示例 150】 3MapboxGL【入門教程】 - 【源代碼圖文示例150】 4Cesium 【入門教程】…

Qt調用Miniconda的python方法

1、 Win 64環境下載及安裝 Miniconda 首先下載Windows 版Miniconda&#xff0c;https://docs.conda.io/en/latest/miniconda.html或 https://repo.anaconda.com/miniconda/ 安裝界面及選擇如下圖所示&#xff1a; 安裝完python3.12版報錯如下。 說明&#xff1a;python3.11版…

Unity 與 JavaScript 的通信交互:實現跨平臺的雙向通信

前言 在現代游戲開發和 Web 應用中&#xff0c;Unity 和 JavaScript 的結合越來越常見。Unity 是一個強大的跨平臺游戲引擎&#xff0c;而 JavaScript 是 Web 開發的核心技術之一。通過 Unity 和 JavaScript 的通信交互&#xff0c;開發者可以實現從 Unity 到 Web 頁面的功能擴…

汽車免拆診斷案例 | 2024 款路虎發現運動版車無法正常識別智能鑰匙

故障現象  一輛2024款路虎發現運動版車&#xff0c;搭載2.0 L發動機&#xff0c;累計行駛里程約為5 000 km。車主反映&#xff0c;使用遙控器無法解鎖車門&#xff0c;隨后使用機械鑰匙打開車門&#xff0c;踩下制動踏板&#xff0c;按壓起動按鈕&#xff0c;儀表盤提示“將智…