Date:2022.03.22
题目描述
小X可以选择的物品有n样,一共分为甲乙丙三类:
1.甲类物品的价值随着你分配给他的背包体积变化,它的价值与分配给它的体积满足函数关系式,v(x) = Ax^2-Bx,A,B是每个甲类物品的两个参数。注意每个体积的甲类物品只有一个。
2.乙类物品的价值A和体积B都是固定的,但是每个乙类物品都有个参数C,表示这个物品可供选择的个数。
3.丙类物品的价值A和体积B也是固定的,但是每个丙类物品可供选择的个数都是无限多个。
你最终的任务是确定小X的背包最多能装有多大的价值上路。
输入格式
第一行两个整数n,m,表示背包物品的个数和背包的体积;
接下来n行,每行描述一个物品的信息。第一个整数x,表示物品的种类:
若x为1表示甲类物品,接下来两个整数A, B,为A类物品的两个参数;
若x为2表示乙类物品,接下来三个整数A,B,C。A表示物品的价值,B表示它的体积,C表示它的个数;
若x为3表示丙类物品,接下来两个整数A,B。A表示它的价值,B表示它的体积。
输出格式
输出文件仅一行为一个整数,表示小X的背包能装的最大价值。
输入输出样例
输入 #1复制
1 0
1 1 1
输出 #1复制
0
输入 #2复制
4 10
2 1 2 1
1 1 2
3 5 2
2 200 2 3
输出 #2复制
610
说明/提示
对于50%的数据,只有乙和丙两类物品;
对于70%的数据,1<=n<=100, 1<=m<=500,0<=A,B,C<=200;
对于100%的数据,1<=n<=100, 1<=m<=2000,0<=A,B,C<=200;
题意说明:甲类是分给每一个物品多少体积x,它的价值才是v(x)。什么垃圾题意。因此01背包时枚举分给当前物品多少体积,多一重循环。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL, LL> PII;
const LL N = 2010,INF

该博客讨论了一个物品选取的问题,涉及甲、乙、丙三类物品,每类物品有不同的价值和体积属性。博主提供了输入输出样例,并解释了动态规划的解题思路,特别是对于甲类物品需要额外的循环处理。最后给出了代码实现。
最低0.47元/天 解锁文章
971

被折叠的 条评论
为什么被折叠?



