洛谷 — 旅行商的背包(背包)
发布日期:2021-07-01 00:18:47
浏览次数:2
分类:技术文章
本文共 1572 字,大约阅读时间需要 5 分钟。
题目链接:
时空限制 1000ms-2000ms / 128MB题目描述
小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商。在出发之前,他购进了一些物品。这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件。他的背包体积是C。怎样装才能获得尽量多的收益呢?作为一名大神犇,他轻而易举的解决了这个问题。
然而,就在他出发前,他又收到了一批奇货。这些货共有m件,第i件的价值Yi与分配的体积Xi之间的关系为:Yi=ai*Xi^2+bi*Xi+ci。这是件好事,但小S却不知道怎么处理了,于是他找到了一位超级神犇(也就是你),请你帮他解决这个问题。
输入格式
第一行三个数n,m,C,如题中所述;
以下n行,每行有三个数Vi,Wi,Di,如题中所述; 以下m行,每行有三个数ai,bi,ci,如题中所述。输出格式
仅一行,为最大的价值。
输入样例
2 1 10
1 2 3 3 4 1 -1 8 -16
输出样例
10
说明
【数据范围】
对于100%的数据,1≤n≤10,000,1≤m≤5,1≤C≤10000, 1≤Wi,Vi,Di≤1000,-1000≤ai,bi,ci≤1000. 【样例解释】 前两种物品全部选走,最后一个奇货分给4的体积,收益为2*3+4*1+-1*16+8*4+-16=10。 时限3s
解题思路
这题就是简单的多重背包,外加枚举奇货的体积。
Accepted Code:#includeusing namespace std;int c, dp[10005];void ZeroOnePack(int w, int v) { for (int i = c; i >= v; i--) dp[i] = max(dp[i], dp[i - v] + w);}void CompletePack(int w, int v) { for (int i = v; i <= c; i++) dp[i] = max(dp[i], dp[i - v] + w);}void MultiplePack(int v, int w, int m) { if (v * m >= c) { CompletePack(w, v); return ; } int k = 1; while (k < m) { ZeroOnePack(w * k, v * k); m -= k; k <<= 1; } ZeroOnePack(w * m, v * m);}int main() { int n, m, v, w, d, ai, bi, ci; scanf("%d%d%d", &n, &m, &c); for (int i = 0; i < n; i++) { scanf("%d%d%d", &v, &w, &d); MultiplePack(v, w, d); } for (int i = 0; i < m; i++) { scanf("%d%d%d", &ai, &bi, &ci); for (int j = c; j >= 0; j--) for (int k = 0; k <= j; k++) dp[j] = max(dp[j], dp[j - k] + (ai * k + bi) * k + ci); } printf("%d\n", dp[c]); return 0;}
转载地址:https://lzyws739307453.blog.csdn.net/article/details/91519219 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月30日 07时01分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
fopen函数失败原因分析以及分析原因的方法
2019-05-01
TCP长连接与短连接的区别
2019-05-01
Lua与C交互之函数注册
2019-05-01
泛型就这么简单
2019-05-01
JPA案例
2019-05-01
数据结构与算法 - 栈和队列
2019-05-01
哈希表(散列表)原理详解
2019-05-01
SpringDataJpa入门案例及查询详细解析(深度好文)
2019-05-01
JSQL查询
2019-05-01
【自然语言处理篇】-- Chatterbot聊天机器人
2019-05-01
接收上传文件
2019-05-01
Springmvc拦截器
2019-05-01
Springmvc异常处理
2019-05-01
mybits
2019-05-01
全排列与最大公共子序列长度
2019-05-01
杨辉三角形的第m行数据
2019-05-01
给定一数找出数组内哪两项相加等于该数
2019-05-01
以二分查找法计算整数的平方根
2019-05-01
剔除字符串中指定字符
2019-05-01
整数的划分
2019-05-01