Codeforces 1132E(大数据多重背包)
题意
给定背包容量$w$,体积分别为$1$到$8$的物体的数量求不超过背包容量的最大体积
思路
考虑将答案转化成$840 * x + y$的形式其中$840 = lcm(1-8), y < 840 * 8$,想法是对于选定的方案所有种类的物品都可以被表示成$840 * t_i + k_i$的形式,那么我们只用考虑每种物品凑不够$840$的那些物品的选取情况,如果能够知道这些选取情况下对应的能取到的最大的$840$份数就能得到答案。所以$dp[i][j]$表示已经考虑完前$i - 1$种物品后取出$j$重量的物品时能获得$840$的最大份数,答案显然为$max(840 * dp[9][i] + i)$当然这是有可能超过背包容量$w$的,所以还要和$w$作比较。
代码
#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl using namespace std;
typedef long long LL; LL w, cnt[10], dp[10][840 * 8 + 5]; int main() {
scanf("%lld", &w);
for(int i = 1; i <= 8; i++) scanf("%lld", &cnt[i]);
memset(dp, -1, sizeof dp);
dp[1][0] = 0;
for(int i = 1; i <= 8; i++) {
for(int j = 0; j <= 840 * 8; j++) {
if(dp[i][j] == -1) continue;
LL t = min(cnt[i], 840LL / i);
for(int k = 0; k <= t; k++) {
dp[i + 1][j + k * i] = max(dp[i + 1][j + k * i], dp[i][j] + (cnt[i] - k) / (840 / i));
}
}
}
LL ans = 0;
for(int i = 0; i <= 840 * 8; i++) {
if(i > w || dp[9][i] == -1) continue;
ans = max(ans, i + min(dp[9][i], (w - i) / 840) * 840);
}
cout << ans;
}
Codeforces 1132E(大数据多重背包)的更多相关文章
- DP大作战——多重背包
题目描述 在之前的上机中,零崎已经出过了01背包和完全背包,也介绍了使用-1初始化容量限定背包必须装满这种小技巧,接下来的背包问题相对有些难度,可以说是01背包和完全背包的进阶问题. 多重背包:物品可 ...
- CodeForces - 95E: Lucky Country (多重背包)
pro:给定N个点,M条边,现在你要给一些连通块加边,使得至少存在一个连通块的大小是由4和7组成的数字.问至少加边数量. sol: 看似一个很难的题目. 首先不要想太难了,还是应该想能不能用背包做. ...
- hdu2191 悼念512汶川大地震 ——多重背包
link:http://acm.hdu.edu.cn/showproblem.php?pid=2191 最简单的那种 #include <iostream> #include <cs ...
- hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...
- Codeforces 106 C 多重背包
题目链接:http://codeforces.com/problemset/problem/106/C 根据题意列出式子,设每种蛋糕做了xi个,则对于每种材料bi*xi<=ai. 对于dough ...
- hdu 2191 悼念512汶川大地震遇难同胞 【多重背包】(模板题)
题目链接:https://vjudge.net/problem/HDU-2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 ...
- HDUOJ----1114(多重背包)悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- HDU——2191悼念512汶川大地震遇难同胞(多重背包转化为01背包或二进制优化)
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- HDU2191_悼念512汶川大地震遇难同胞——珍惜如今,感恩生活(背包/多重背包)
解题报告 题目传送门 题意: 中文不多说; 思路: 基础多重背包,每一个物品有多个能够选.转换成01背包解. #include <iostream> #include <cstrin ...
- --hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
解题思路: 多重背包:第 i 件物品有 j 个可用. 本题中 第 p[i] 类大米 有 c[i] 袋大米可买 ,故本题为多重背包. n(总钱数).m(种类) p[i] 单价 h[i] 重量 c[i] ...
随机推荐
- 浅谈LCA问题(最近公共祖先)(四种做法)
[模板]最近公共祖先(LCA) \(update \ 2023.1.3\) 新增了树链剖分 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入格式 第一行包含三个正整数 \ ...
- Python邮箱推送
利用python进行邮箱推送可以配和爬虫使用,也可以监控github上面CVE等 一个基于Python的邮箱推送脚本 需要有一个邮箱授权码不知道哪里获取可以百度就不多详细的描述了 成品: # 发送多种 ...
- Java后台如何接收与处理JSON类型数据
项目开发中偶尔会使用到某个为JSON类型的字段,一个字段中又包含多个其他的字段. 这种设计方式是根据实际需要来进行处理的,比如规则可能包含多条,每一条规则又包含 多个字段:再比如一些特殊的应用场景如标 ...
- Java 入门与进阶P-7.3+P-7.4
函数的调用 简单应用举例 例1:编写一个求两个数的和的子函数 要求使用键盘录入的方式: 分析与总结: 要实现某一功能,把其定义为一个函数封装起来 就可以重复多次使用:这样一来,main函数里的代码减少 ...
- OnionArch 2.0 - 基于DDD的洋葱架构改进版开源
大家好,去年我发布了一篇 OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构.很多程序员都比较感兴趣,给我要源代码.这次我把OnionArch进行了升级,改进了一些特性,并放 ...
- 城市路(Dijkstra)
这道题目需要用到 Dijkstra plus 版(堆优化) 模板还是一样就是有几个点值得注意 1.这里用的是优先队列,原版需要搜出最小,并且没用过的点,省时间就剩在这里用小根堆就可以完美解决这个问题. ...
- Arm-Linux子系统的互相Notify
前言: Linux下面不同的子系统一个个的组成了整个系统的运行环节,为了让这些子系统能够互相通讯,有一种叫做:notify chain(通知链)的东西.本篇看下. 概括 所谓通知链,有通知,就有执行的 ...
- XMind 2022 Win/macOS 使用教程
XMind简介 XMind 2022 Win/macOS (强大的思维导图软件).XMind 是一款让你专注思维,捕捉每一个灵感瞬间的 App.每当萌生新想法时,「XMind」帮你专注于它的扩展延伸和 ...
- sqlserver数据库批量新增修改类
MSSql Server 数据库批量操作 需要引用的命名空间 using System; using System.Collections.Generic; using System.Data; us ...
- Windows Server 2016 安装AD和Exchange
一.AD虚拟机操作 1.安装net framework 4.8 下载链接:https://dotnet.microsoft.com/download/dotnet-framework/net48 安装 ...