部分揹包問題

2021-10-07 07:49:58 字數 1501 閱讀 4213

uog

up

2240

luogu\ p2240

luogup

2240

阿里巴巴走進了裝滿寶藏的藏寶洞。藏寶洞裡面有 n(n

≤100

)n(n \le 100)

n(n≤10

0)堆金幣,第 i

ii 堆金幣的總重量和總價值分別是 mi,

vi(1

≤mi,

vi

≤100

)m_i,v_i(1\le m_i,v_i \le 100)

mi​,vi

​(1≤

mi​,

vi​≤

100)

。阿里巴巴有乙個承重量為 t(t

≤1000

)t(t \le 1000)

t(t≤10

00) 的揹包,但並沒辦法將全部的金幣都裝進去。他想裝走盡可能多價值的金幣。所有金幣都可以隨意分割,分割完的金幣重量價值比(也就是單位**)不變。請問阿里巴巴最多可以拿走多少價值的金幣?

第一行兩個整數 n

nn、t

tt接下來 n

nn 行,每行兩個整數 mi,

vi

m_i,v_i

mi​,vi

​乙個整數表示答案,輸出兩位小數

4

5010

6020

10030

12015

45

240.00
不要問

我我為什

麼要做這

種題,洛

谷隨機跳

題調到的

。不要問我我為什麼要做這種題,洛谷隨機跳題調到的。}

不要問我我為

什麼要做

這種題,

洛谷隨機

跳題調到

的。這道題看著是道揹包,但好像是貪心吧。

因為可以切開金塊,所以我們就從最賺的開始裝,接著第二賺,然後一直向下,知道裝完或者裝不下了。

我們就排序一下,直接開始乙個乙個裝就完事了。

(注意一下整數轉成小數,就可以了)

#include

#include

using

namespace std;

struct node a[

101]

;int n, t, all, now;

double ans;

bool

cmp(node x, node y)

intmain()

if(all <= t)

sort

(a +

1, a + n +

1, cmp)

;//按利潤從大到小排序

all = ans =0;

//初始化

while

(all < t)

else

}return0;

}

部分揹包問題

描述給定乙個最大容量為m公斤的揹包和n種食品,有食鹽白糖大公尺等。已知第i種食品價值為每公斤vi元 有wi公斤,程式設計確定乙個方案 使揹包中食品總價值最大 輸入 輸入m,n n種食品的vi,wi 1 m n 1000 1 wi,vi 1000 輸出 揹包的最大價值 樣例輸入1 複製3 3 10 3...

部分揹包問題

給定 n 個物品和乙個容量為c的揹包,物品 i 的重量是w,其價值是v,揹包問題是如何選擇裝入揹包的物品使得裝入揹包中的物品總價值最大。與0 1揹包問題的區別 在部分揹包問題中物品可以部分裝入,但不能重複裝入揹包 使用貪心演算法解決該問題的關鍵是如何確定貪心策略。舉例一下幾種貪心策略 根據如何選出最...

揹包問題(1)部分揹包

1.現有4個揹包,已知每個物品的體積和價值,每個揹包最多容納10個體積的物品,每件物品只能拿一次,問怎麼樣裝使揹包的價值最大?分析 1 二維陣列求法 如果包的體積由0變化到10,每次物品只能放一次,則包內所放物品的價值量為 則包所放的最大價值即二維陣列的最後乙個值 如下 include using ...