題目描述
有乙個箱子容量為v(正整數,0<=v<=20000),同時有n個物品(0<n<=30,每個物品有乙個體積(正整數)。
要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。
輸入輸出格式
輸入格式:
乙個整數,表示箱子容量
乙個整數,表示有n個物品
接下來n行,分別表示這n 個物品的各自體積
輸出格式:
乙個整數,表示箱子剩餘空間。
輸入輸出樣例
輸入樣例#1:246
83127
97輸出樣例#1:0說明
noip2001普及組 第4題
這道題看似是搜尋,但是可以用揹包做。
題目要求求出最小的剩餘空間,也就是要求出最大的可裝重量
這樣,我們可以將乙個物體的重量當作它的價值,進而將題目轉變為乙個基本的01揹包問題:
有乙個箱子容量為v(正整數,0<=v<=20000),同時有n個物品(0<n<=30),每個物品有乙個體積(正整數)和乙個價值(等於體積)。
要求n個物品中,任取若干個裝入箱內,使總價值最大。
對於每乙個物體,都有兩種狀態:裝 與不裝
那麼,對於任意重量m的最大價值 f (m) = max ( f ( m - w[i] ) + w[i], f (m) )(w為重量(即價值))
其中,f ( m - w[i] ) 指在裝了物品i後,箱子的剩餘容量能裝的最大重量
f ( m - w[i] ) + w[i] 指在在裝了物品i後,箱子能裝的最大重量
#include #include #include #include #include #include #include using namespace std;
const int maxn = 1e3+5;
const int n = 20005;
#define ll long long
/*有乙個箱子容量為v(正整數,0<=v<=20000),同時有n個物品(0<n<=30),每個物品有乙個體積(正整數)和乙個價值(等於體積)。
要求n個物品中,任取若干個裝入箱內,使總價值最大。
*/int t, m, n;
int c[n], v[n], dp[n];
int main()
}cout << m-dp[m] << endl; //最小的剩餘空間,也就是要求出最大的可裝重量
}}
洛谷 P1049 裝箱問題
題目描述 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30,每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入輸出格式 輸入格式 乙個整數,表示箱子容量 乙個整數,表示有n個物品 接下來n行,分別表示這n 個物品的各自體積 輸出格...
洛谷P1049 裝箱問題
有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入格式 1個整數,表示箱子容量 1個整數,表示有n個物品 接下來n行,分別表示這n個物品的各自體積 輸出格式 1個整數,表示箱子剩餘空間。輸入樣例 1 複製 2468 31...
洛谷P1049 裝箱問題
p1049 裝箱問題 題目描述 有乙個箱子容量為vv 正整數,0 le v le 200000 v 20000 同時有nn個物品 0要求nn個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入輸出格式 輸入格式 11個整數,表示箱子容量 11個整數,表示有nn個物品 接下來nn行,分別表示這n...