貪心刷題1-部分背包

題目來源:【深基12.例1】部分背包問題 - 洛谷

參考書目:《深入淺出程序設計競賽(基礎篇)》

解題思路:這道題是部分背包,如果金幣不能完整的放入是可以分割的。題目中有若干堆金幣,每堆金幣有一定的重量(m)和價值(v),以及一個最大承重為 t 的背包。目標是通過完全或部分地拿取這些金幣堆,使得背包中的金幣價值最大化。代碼采用貪心算法,通過按價值與重量比降序排序金幣堆,然后迭代地將它們添加到背包中,直到背包裝滿或沒有更多的金幣堆可考慮。

解題步驟:

  • 迭代讀取每堆金幣的重量和價值,并存儲在數組 a 中。
  • 使用 sort 函數和 cmp 比較函數對金幣堆進行排序。
  • 迭代地將每堆金幣加入背包:
    • 如果當前金幣堆的重量大于剩余容量,則跳出循環。
    • 否則,從剩余容量中減去金幣堆的重量,并將其價值加到總價值 ans 上。
  • 如果因為一堆金幣無法完全加入而退出循環,將該金幣堆的一部分加入到 ans 中,以填滿剩余容量。
  • 最后,打印出總價值 ans,保留兩位小數。
#include<iostream>
#include<algorithm>using namespace std;// 定義結構體來存儲每堆金幣的重量和價值
struct coin {int m, v; // 金幣堆的重量和價值
} a[110];// 比較函數,用于根據價值與重量的比率(性價比)進行排序
bool cmp(coin x, coin y)
{return x.v * y.m > y.v * x.m; // 比較兩堆金幣的性價比
}int main()
{int n, t, c, i;float ans = 0; // 初始化答案變量cin >> n >> t; // 讀入金幣堆數和背包容量c = t; // 背包剩余容量初始化為背包總容量// 讀入每堆金幣的重量和價值for (i = 0; i < n; i++){cin >> a[i].m >> a[i].v;}// 對金幣堆按性價比降序排序sort(a, a + n, cmp);// 遍歷金幣堆,嘗試將它們加入背包for (i = 0; i < n; i++){if (a[i].m > c) break; // 如果當前金幣堆無法完全裝入背包,則跳出循環c -= a[i].m; // 減少背包剩余容量ans += a[i].v; // 增加背包中金幣的總價值}// 如果退出循環是因為一堆金幣無法完全加入,則加入這堆金幣的一部分if (i < n){ans += 1.0 * c / a[i].m * a[i].v; // 加入部分金幣堆,按比例計算價值}// 輸出最終答案,保留兩位小數printf("%.2lf", ans);return 0;
}

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

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

相關文章

mac電腦使用pyinstaller打包python腳本

pyinstaller -F template.py 出現報錯"AssertionError: Executable contains code signature!" 移除簽名 codesign --remove-signature /Users/f7692281/PycharmProjects/TPtestlist/transmit_v6.0.py 打包命令 pyinstaller --windowed transmit_v6.0.py pyinst…

【js】事件循環之promise的async/await與setTimeout

什么是事件循環 事件循環又叫消息循環&#xff0c;是瀏覽器渲染主線程的工作方式。 瀏覽器開啟一個永不停止的for循環&#xff0c;每次循環都會從消息隊列中取任務&#xff0c;其他線程只需要在合適的時候將任務加入到消息隊列的末尾。 過去分為宏任務和微任務&#xff0c;現…

wordpress模板官網

移民wordpress主題 移民代辦wordpress主題&#xff0c;適合做海外移民咨詢的代理公司搭建wordpress企業官方網站使用。 https://www.jianzhanpress.com/?p5130 夏令營wordpress主題 綠色夏令營wordpress主題&#xff0c;適合做夏令營或戶外拓展的公司搭建wordpress官方網站…

D2587A高壓大電流DC-DC——專為反激式、升壓和正向轉換器應用而設計的單片集成電路

1、概述 D2587A穩壓器是專為反激式、升壓和正向轉換器應用而設計的單片集成電路。該器件提供四種不同的輸出電壓版本&#xff1a;3.3V、5V、12V 和可調節電壓。這些穩壓器需要的外部元器件很少&#xff0c;因此具有成本效益&#xff0c;并且易于使用。該電源開關是一款5A NPN器…

面試經典150題——最小棧

?Life is a journey, theres no right or wrong. 1. 題目描述 2. 題目分析與解析 2.1 思路一 看到題目的一瞬間&#xff0c;有沒有注意到 常數時間內檢索到最小元素的棧&#xff0c;那說明我們肯定需要把最小元素的下標存儲起來&#xff0c;這樣才能在常數時間內找到。 其…

網工學習 DHCP配置-接口模式

網工學習 DHCP配置-接口模式 學習DHCP總是看到&#xff0c;接口模式、全局模式、中繼模式。理解起來也不困難&#xff0c;但是自己動手操作起來全是問號。跟著老師視頻配置啥問題沒有&#xff0c;自己組建網絡環境配置就是不通&#xff0c;悲催。今天總結一下我學習接口模式的…

c++動態獲取工作路徑

最近在寫項目時遇到一個問題 pclrobot:~/cProject/projects/myPro/mpRPC$ ls autobuild.sh bin build CMakeLists.txt conf example lib log README.md src test如上所示&#xff0c;我的項目根目錄里有一個log文件夾和一個bin文件夾&#xff0c;我的需求是 bin目錄…

揭秘8.4k星開發者的秘密武器:it-tools在線工具集,你不可不知!

在IT的世界里&#xff0c;為了更好地發揮自己的才能&#xff0c;必須善用優秀的工具。深入挖掘IT-Tools的神奇力量&#xff0c;讓你的工作像魔法一般變得輕松高效&#xff01;無論是自動化、監控還是問題解決&#xff0c;這些工具是我們事業成功的關鍵利器。選擇合適的IT工具&a…

PlantUML - 時序圖

時序圖主要內容 下面是一個簡單的時序圖&#xff0c;我們可以很容易并且美觀的表達我們的交互流程&#xff0c;只需要在箭頭的兩邊指定一個名字&#xff0c;加上描述即可&#xff1a; startuml bkloanapply -> bkloanapprove : request bkloanapprove --> bkloanapply :…

C++ map用法

int main() {void *p;str *st;st (str*)malloc(sizeof(str));st->a 23;st->b 24;p st;//使用void指針需強制類型轉換printf("%d\n%d\n",((str*)p)->a, ((str*)p)->b);free(st);map<char, int> mpci;mpci[m] 20;mpci.insert(pair<char, int…

#WEB前端(盒子模型)

1.實驗&#xff1a;盒子 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; margin&#xff08;外邊距&#xff09; border&#xff08;邊框&#xff09; padding&#xff08;內邊距&#xff09; 4.代碼&#xff1a; <!DOCTYPE html> <html lang"en"> &…

【C++】類與對象(static、explicit、友元、隱式類型轉換、內部類、匿名對象)

&#x1f308;個人主頁&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列專欄&#xff1a;http://t.csdnimg.cn/eCa5z 目錄 再談構造函數 初始化列表 隱式類型轉換 explicit關鍵字 static成員 概念 計算程序中創建出了多少個類…

開源軟件的商業模式探析:開放與盈利的平衡

寫在開頭 開源軟件的概念和應用已經成為了現代科技領域中的一個重要組成部分。然而&#xff0c;雖然開源軟件的價值和影響力得到了廣泛認可&#xff0c;但如何在開放的環境中找到商業盈利的平衡卻是一個頗具挑戰性的問題。本文將深入探討開源軟件的商業模式&#xff0c;從基本…

力扣61:旋轉鏈表

題目 給你一個鏈表的頭節點 head &#xff0c;旋轉鏈表&#xff0c;將鏈表每個節點向右移動 k 個位置。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,3,4,5], k 2輸出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 輸入&#xff1a;head [0,1,2], k 4輸出&#xff1a;…

卷積神經網絡(CNN)原理與實現

卷積神經網絡(CNN) 卷積神經網絡原理卷積神經網絡的數學推導卷積層反向傳播算法數學推導卷積層實現代碼 卷積神經網絡(CNN) 卷積神經網絡原理 卷積神經網絡是一種用于圖像、語音、自然語言等數據的深度學習模型&#xff0c;其核心思想是使用卷積操作提取輸入數據的特征&…

4、通達OA代碼審計

一、文件操作 1、文件上傳配合文件包含審計 文件上傳首先確定存在漏洞的文件。和文件上傳相關的函數比如upload。在從上到下分析構造的條件1. 從 POST 請求中提取變量 P 的值。 2. 檢查 P 是否已設置且不為空字符串。 3. 如果 P 已設置且非空&#xff0c;進入包含 "inc/…

JavaScript定義函數,創建函數實例時的內部原理

1、定義一個函數&#xff0c;JavaScript內部各做了哪些事情 定義一個函數時&#xff0c;JavaScript內部執行了以下步驟&#xff1a; 解析函數聲明: 當你定義一個函數時&#xff0c;JavaScript的解析器會首先解析函數聲明。這意味著它會檢查函數聲明的語法是否正確&#xff0c;…

[NSSCTF 2nd]MyJs

做一題ejs原型鏈污染 首先是登錄界面 源碼里面提示了源碼的路由 js不熟先審計一下 const express require(express); #導入Express框架&#xff0c;用于構建Web應用程序的服務器和路由 const bodyParser require(body-parser); #導入body-parser中間件&#xff0c;用于解析…

軟考證書=職稱證書?

官方的回答 根據《計算機技術與軟件專業技術資格&#xff08;水平&#xff09;考試暫行規定》&#xff08;國人部發〔2003〕39號&#xff09;規定&#xff0c;通過考試并獲得相應級別計算機專業技術資格&#xff08;水平&#xff09;證書的人員&#xff0c;表明其已具備從事相…

學習Android的第二十二天

目錄 Android ContextMenu 上下文菜單 ContextMenu 范例 參考文檔 Android SubMenu 子菜單 范例 參考文檔 Android PopupMenu 彈出菜單 范例 參考文檔 Android ContextMenu 上下文菜單 在Android開發中&#xff0c;ContextMenu&#xff08;上下文菜單&#xff09;為…