题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5445

题解:一看就像多重背包就是怎么看都不好做。但是这里有点明显的就是有两个背包,一个是糖果一个是箱子,于是不妨就试试两个多重背包,先考虑用这些糖果能否满足条件设dp[i]表示构成能量为i的糖果最小需要多少体积,然后将所需要的体积保存下来那么只要找到一些箱子总共能容纳的体积大于等于这个值就行这时的dp[i]又表示容积总共是i的箱子最少需要多少钱。其实这样也是不够严谨的因为这样也不能保证糖果刚好能放好但是理论上是可行的。还有要注意的就是多重背包要注意二进制的优化。

#include <iostream>
#include <cstdio>
#include <cstring>
#define inf 0X3f3f3f3f
using namespace std;
const int M = 2e5 + 10;
const int Max = 50000 + 10;
int dp[M];
int t[M] , u[M] , v[M];
int x[M] , y[M] , z[M];
int main() {int test , n , m , q;scanf("%d" , &test);while(test--) {int ans = inf;scanf("%d%d%d" , &n , &m , &q);for(int i = 0 ; i < n ; i++) {scanf("%d%d%d" , &t[i] , &u[i] , &v[i]);}for(int i = 0 ; i < m ; i++) {scanf("%d%d%d" , &x[i] , &y[i] , &z[i]);}memset(dp , inf , sizeof(dp));dp[0] = 0;for(int i = 0 ; i < n ; i++) {int mm = v[i];for(int j = 1 ; mm > 0 ; j <<= 1) {int gg = min(j , mm);for(int l = Max ; l >= gg * t[i] ; l--) {dp[l] = min(dp[l] , dp[l - gg * t[i]] + gg * u[i]);}mm -= j;}}for(int i = q ; i <= Max ; i++) {if(dp[i] != inf) {ans = min(ans , dp[i]);}}memset(dp , 0 , sizeof(dp));for(int i = 0 ; i < m ; i++) {int mm = z[i];for(int j = 1 ; mm > 0 ; j <<= 1) {int gg = min(j , mm);for(int l = Max ; l >= gg * y[i] ; l--) {dp[l] = max(dp[l] , dp[l - gg * y[i]] + gg * x[i]);}mm -= j;}}int flag = 0;for(int i = 1 ; i <= Max - 10 ; i++) {if(dp[i] >= ans && ans != inf) {flag = i;break;}}if(flag) printf("%d\n" , flag);else printf("TAT\n");}return 0;
}

转载于:https://www.cnblogs.com/TnT2333333/p/7652597.html

hdu 5445 Food Problem (多重背包)相关推荐

  1. [HDU 5445]Food Problem[多重背包]

    题目链接:[HDU 5445]Food Problem[多重背包] 题意分析: 有n种类型的点心,每种提供t的能量,占据u的空间,有v个: 有m种类型的卡车,每种容量x,雇佣花费y,能提供z辆: 点心 ...

  2. HDU 5445 Food Problem 多重背包+二进制优化

    据说也可以用单调队列优化多重背包,但是我不会,所以还是选择了二进制优化... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:先给n,m, ...

  3. Hdu 5445 Food Problem 多重背包

    题意:给出n,m,p,分别表示有n种点心,m种卡车,能量p. 然后给出每种点心所能获得的能量,所占卡车的体积,以及每种点心的数量. 再给出每种卡车所能装下的空间,租这种卡车的费用,以及每种卡车的数量. ...

  4. HDU 5445 Food Problem 两次多重背包

    题目描述: Problem Description Few days before a game of orienteering, Bell came to a mathematician to so ...

  5. HDU 5445 Food Problem(多重背包)

    Description n种点心,每种点心有一定的能量t,体积u和数量v,现在要用m种卡车搬运这些点心,每种开车有一定的容量x,花费y和数量z,点心可以分割但选一块就要都选,现在问将运送总能量不小于p ...

  6. HDU 5445:Food Problem

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题目翻译: 有N种甜点,M种卡车,至少需要P点能量. 然后给出N个 t, u, v,t是甜点能提 ...

  7. HDU 5445 Food Problem

    题意:有n种糖果,m种箱子,需要的能量为p.每种糖果有它的能量.体积.数量,每种箱子有它的容量.价格.数量,问至少获得p能量的前提下,最少花多少钱 思路:首先可以知道这是一个背包,然后可以求出能量为i ...

  8. Dividing(HDU 1059)(多重背包_二进制优化)

    题目链接: 题意:有价值分别为1,2,3,4,5,6的marbles(大理石)若干,问是否能使这些marbles平分.[marbles总数不超过2e4(很明显这是一个大常数,所以用二进制优化来做)] ...

  9. HDU 5445 (多重背包)

    题目链接:点击这里 题意: 有n个物品, m个卡车. 已知每种物品的能量, 体积和数量还有每种卡车的体积, 花费和数量, 求至少得到p能量的最少的卡车花费. 物品装卡车的时候能够切开装. 两次多重背包 ...

最新文章

  1. vb error bc30469: 对非共享成员的引用要求对象引用_提问||准备好面向你的对象了吗?...
  2. ARP监控工具ARPalert常用命令集合大学霸IT达人
  3. 分布式系统监视 开源解决方案 zabbix与nagios对比
  4. Java 反射的理解
  5. android指定sqlite路径_Android:自定义Sqlite数据库路径
  6. 一起学 Java(四) File、Try 、序列化、MySQL、Socket
  7. k8s与CICD--将drone部署到kubernetes中,实现agent动态收缩
  8. stm32定时2通道3映射_stm32学习笔记之问题总结
  9. hadoop备战:hbase的分布式安装经验
  10. jQuery学习(一):鼠标移动显示大图
  11. 1090. Highest Price in Supply Chain (25)-PAT甲级真题
  12. Vue报错'Do not use built-in or reserved HTML elements as component id:解决方法
  13. PHP Xdebug调试专题
  14. Java下载及环境配置
  15. 又是一年新来到,别墅翻新要趁早
  16. 各双拼输入方案之间有明显的优劣之分吗?
  17. ORAN C平面 Section Extension 5
  18. 微信小程序图片裁剪插件image-cropper
  19. jqueryCutDown.js结合moment.js倒计时整理,直接copy可用,别忘了引入jquery
  20. 软件可靠性工程研讨会报告

热门文章

  1. Django计算机毕业设计校园二手拍卖网python(源码程序+lw+远程部署)
  2. Java中二维数组的动态初始化
  3. 市场观察:130个智慧消防中标项目分析
  4. python开发电影查询系统(一)—python实现后台数据
  5. python计算汽车的平均油耗_用python对汽车油耗进行数据分析(anaconda python3.6完全跑通)...
  6. buff系统 游戏中_BUFF有11级?游戏中BUFF等级很多种,了解后不做云玩家
  7. 要怎么在计算机里清除桌面内存,电脑内存过大?教你如何清理电脑内存
  8. Ubuntu14联合安装opencv与opencv_contrib踩过的坑
  9. 陈天桥与杨澜的一席经典对话
  10. 数学建模——Matlab画散点图