codevs 3152 装箱问题3

装箱问题3

http://codevs.cn/problem/3152/

题目描述 Description

设有n种物品,记作A1、A2、…、An,对应于每个Ai(1<=i<=n)都有一个重量Awi和价值Avi(重量和价值都为正整数)。另外,对应于每个Ai,都有一件可代替它的“代用品”Bi,Bi的重量和价值分别为Bwi和Bvi。

本题的任务是:选择这n件物品或其代用品的一个子集装进背包,使总重量不超过给定重量TOT,同时使总价值VAL最高。装填的第I步,要么装入Ai,要么装入Bi,要么Ai和Bi都不装。

输入描述 Input Description

第一行:n TOT ,n<=100, TOT<=10000

第二行:AW1 A v1 B W1 Bv1

第三行:AW2 A v2 B W2 Bv2

……

第n+1行:AWn A vn B Wn Bvn

输出描述 Output Description

只有一个数为最大的价值

样例输入 Sample Input

4 20

8 20 12 31

2 3 9 20

13 31 11 12

8 9 13 36

样例输出 Sample Output

40

分组背包,每组分3个,不加,A,B

#include<cstdio>
#include<iostream>
using namespace std;
int n,m,w[101][3],v[101][3],f[10001];
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
     scanf("%d%d%d%d",&w[i][1],&v[i][1],&w[i][2],&v[i][2]);
    for(int i=1;i<=n;i++)
     for(int j=m;j>0;j--)
      for(int k=0;k<=2;k++)
       {
             if(j<w[i][k]) continue;
             f[j]=max(f[j],f[j-w[i][k]]+v[i][k]);
       }
    printf("%d",f[m]);
}
时间: 2025-01-15 23:36:43

codevs 3152 装箱问题3的相关文章

CodeVS 1014 装箱问题(DP)

题目大意: http://codevs.cn/problem/1014/ 源码: #include <iostream> #include <cmath> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int v,n; int arr[50]; int main() { cin >> v >> n; int dp

codevs 1014 装箱问题 2001年NOIP全国联赛普及组

题目描述 Description 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入描述 Input Description 一个整数v,表示箱子容量 一个整数n,表示有n个物品 接下来n个整数,分别表示这n 个物品的各自体积 输出描述 Output Description 一个整数,表示箱子剩余空间. 样例输入 Sample Input 24 6

codevs 1464 装箱问题 2 x

题目描述 Description 一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6.这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户.因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量.他们很需要有一个好的程序帮他们解决这个问题从而节省费用.现在这个程序由你来设计. 输入描述 Input Description 输入文件包括几行,每一行代表一个订单.每个订单里的一

Codevs 1014 装箱问题

题目描述 Description 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入描述 Input Description 一个整数v,表示箱子容量 一个整数n,表示有n个物品 接下来n个整数,分别表示这n 个物品的各自体积 输出描述 Output Description 一个整数,表示箱子剩余空间. 样例输入 Sample Input 24 6

【动态规划】【零一背包】CODEVS 1014 装箱问题 2001年NOIP全国联赛普及组

1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int n,m,w[31],f[30001]; 5 int main() 6 { 7 scanf("%d%d",&m,&n); 8 for(int i=1;i<=n;i++) scanf("%d",&w[i]); 9 for(int i=1;i<=n;i++) 10 for(i

DP基础总结

DP是一个不能更常用的算法了,这里也就对基础的五大类DP题型做个总结. 背包型 背包问题是很多教材上DP的引入题,它也确实是基础中的基础,总的来说背包型DP有01背包.部分背包.完全背包三种,其余的例如多重背包等都是衍生题目.直接看例题吧. 先看一道01背包. Codevs 1014装箱问题 这类题目只有两种状态,拿或不拿,所以叫01背包.状态转移方程还是比较好写的:f[i] = max{f[i], f[i-x]+x}.f[i]表示选到i的最大容积(箱内容积),最后用总的去减去f[v]就是ans

[ CodeVS冲杯之路 ] P2492

不充钱,你怎么AC? 题目:http://codevs.cn/problem/2492/ 在此先orz小胖子,教我怎么路径压缩链表,那么这样就可以在任意节点跳进链表啦(手动@LCF) 对于查询操作,直接树状数组(以下简称BIT)维护,修改操作就一个个暴力开方搞,再用差值单点更新BIT 不过这样会TLE,要加一点优化对不对,正如开头所说的路径压缩链表 路径压缩链表其实就是个并查集,在普通的链表里,删去两个连续的节点后会是下面这种情况,如删去2,3 当访问 2 的时候,会跳到3,但 3 已经删除了,

[CODEVS 1281] Xn数列

描述 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn http://codevs.cn/problem/1281/ 分析 比较裸的矩阵乘法题, 好久没做了, 写写思路 假设矩阵 A = { {a1, a2}, {a3, a4} }, B = { {b1, b2}, {b3, b4} }. 根据矩阵乘法的计算方法, 有 : A×B = { {a1b1+a2b2, a1b2+a2b4}, {a3b1+a4b3, a3b2+a4b4} }. 那

装箱问题

装箱问题 发布时间: 2017年8月15日 23:23   最后更新: 2017年8月15日 23:25   时间限制: 1000ms   内存限制: 128M 描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入 一个整数,表示箱子容量 一个整数,表示有n个物品 接下来n行,分别表示这n 个物品的各自体积 输出 一个整数,表示箱子剩余空间. 样