01揹包 洛谷 P2677 超級書架 2

2021-07-31 02:11:58 字數 1164 閱讀 4050

farmer john最近為奶牛們的圖書館添置了乙個巨大的書架,儘管它是如此的大,但它還是幾乎瞬間就被各種各樣的書塞滿了。現在,只有書架的頂上還留有一點空間。 所有n(1 <= n <= 20)頭奶牛都有乙個確定的身高h_i(1 <= hi <= 1,000,000 - 好高的奶牛》<)。設所有奶牛身高的和為s。書架的 高度為b,並且保證1 <= b <= s。 為了夠到比最高的那頭奶牛還要高的書架頂,奶牛們不得不象演雜技一般,一頭站在另一頭的背上,疊成一座「奶牛塔」。當然,這個塔的高度,就是塔中所有奶牛的身高之和。為了往書架頂上放東西,所有奶牛的身高和必須不小於書架的高度。 塔疊得越高便越不穩定,於是奶牛們希望找到一種方案,使得疊出的塔在高度不小於書架高度的情況下,高度盡可能小。你也可以猜到你的任務了:寫乙個程式,計算奶牛們疊成的塔在滿足要求的情況下,最少要比書架高多少。

輸入格式:

第1行: 2個用空格隔開的整數:n 和 b * 第2..n+1行: 第i+1行是1個整數:h_i
輸出格式:

第1行: 輸出1個非負整數,即奶牛們疊成的塔最少比書架高的高度
輸入樣例#1:

5 16

3 1

3 5

6輸出樣例#1:

輸出說明:

我們選用奶牛1、3、4、5疊成塔,她們的總高度為3 + 3 + 5 + 6 = 17。任何方案都無法疊出高度為16的塔,於是答案為1。

這道題剛看上去可能會想到排序+貪心,後來都想到了反例,於是就想到了揹包。

題目要求我們求超過高度的最小高度,並且會保證所有奶牛的高度加起來會高過書架,那麼我們不妨換個思路,把所有的奶牛的高度相加得到sum,減去書架高度s,得到k,那麼我們要求的就是在不超過k(體積)的情況下求最大高度(價值),這是不是就變成了01揹包問題,於是問題迎刃而解。

#include

#include

using

namespace

std;

const

int maxn=100000+10;

int f[maxn],h[maxn];

int main()

int k=sum-s; //轉換思路

for(int i=1;i<=n;i++)

cout

0;}

洛谷 P2677 超級書架 2

farmer john最近為奶牛們的圖書館添置了乙個巨大的書架,儘管它是如此的大,但它還是幾乎瞬間就被各種各樣的書塞滿了。現在,只有書架的頂上還留有一點空間。所有n 1 n 20 頭奶牛都有乙個確定的身高h i 1 h i 1,000,000 好高的奶牛 設所有奶牛身高的和為s。書架的 高度為b,並...

洛谷 P2677 超級書架 2 題解

farmer john最近為奶牛們的圖書館添置了乙個巨大的書架,儘管它是如此的大,但它還是幾乎瞬間就被各種各樣的書塞滿了。現在,只有書架的頂上還留有一點空間。所有n 1 n 20 頭奶牛都有乙個確定的身高h i 1 h i 1,000,000 好高的奶牛 設所有奶牛身高的和為s。書架的 高度為b,並...

洛谷P2676 超級書架

farmer john最近為奶牛們的圖書館添置了乙個巨大的書架,儘管它是如此的大,但它還是幾乎瞬間就被各種各樣的書塞滿了。現在,只有書架的頂上還留有一點空間。所有n 1 n 20,000 頭奶牛都有乙個確定的身高h i 1 h i 10,000 設所有奶牛身高的和為s。書架的高度為b,並且保證 1 ...