题目:
有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。
第 i 件物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。输入格式
第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。
接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。
输出格式
输出一个整数,表示最大价值。
数据范围
0
- 4 5
- 1 2
- 2 4
- 3 4
- 4 5
8
代码:(体积逆序)
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- using namespace std;
- typedef pair<int,int> PII;
- const int N = 1e3 + 10;
- int x,y;
- int v[N],w[N];
- int dp[int(1e3 + 10)];
- int main(){
- cin >> x >> y;
- for(int i = 1;i <= x;i ++){
- cin >> v[i] >> w[i];
- }
- int ans = 0;
- for(int i = 1;i <= x;i ++){
- for(int j = y;j >= v[i];j --){
- dp[j] = max(dp[j],dp[j-v[i]]+w[i]);
- //ans = max(ans,dp[j]);
- }
- }
- for(int i = 0;i <= y;i ++){
- ans = max(ans,dp[i]);
- }
- cout << ans << endl;
- return 0;
- }
题目
有 N 种物品和一个容量是 V的背包,每种物品都有无限件可用。
第 i 种物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。输入格式
第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。
接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。
输出格式
输出一个整数,表示最大价值。
数据范围
0
- 4 5
- 1 2
- 2 4
- 3 4
- 4 5
10
代码:(体积正序)
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- using namespace std;
- typedef pair<int,int> PII;
- const int N = 1e3 + 10;
- int x,y;
- int v[N],w[N],dp[N];
- int main(){
- cin >> x >> y;
- for(int i = 1;i <= x;i ++)
- cin >> v[i] >> w[i];
- int ans = 0;
- for(int i = 1;i <= x;i ++){
- for(int j = v[i];j <= y;j ++){
- dp[j] = max(dp[j],dp[j-v[i]]+w[i]);
- ans = max(ans,dp[j]);
- }
- }
-
- cout << ans << endl;
- return 0;
- }
题目
有 N 种物品和一个容量是 V 的背包。
第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。
输出最大价值。
第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。
接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。
输出一个整数,表示最大价值。
0 代码:(体积正序) 题目: 有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi 。 求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。 接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。 输出一个整数,表示最大价值。 0 本题考查多重背包的二进制优化方法。 代码:(体积逆序) 有 N 组物品和一个容量是 V 的背包。 每组物品有若干个,同一组内的物品最多只能选一个。 求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。 输出最大价值。 第一行有两个整数 N,V ,用空格隔开,分别表示物品组数和背包容量。 接下来有 N组数据: 0 代码:(体积逆序)输入样例
输出样例:
10
NO.4 多重背包问题2(二进制优化)
输出最大价值。输入格式
输出格式
数据范围
提示:
输入样例
输出样例:
10
NO.5 分组背包问题
每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。输入格式
数据范围
输入样例
输出样例:
8