hdu5445

题目

就是要获得一定量的能量,通过食物,食物有数量以及体积,然后用车子装食物,车子有花费和数量,求在目标能量下的最小花费。

思路

首先就是要写两次背包,第一次求出最小体积,第二次球最小花费,还有就是题目给出最大花费不超过50000,要围绕这个,别的姿势可能会超。

代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<cstdlib>
#include<algorithm>
#include<cmath>using namespace std;typedef long long ll;const int maxn=1010;
const int maxm=51000;
int t[maxn],u[maxn],v[maxn];
int x[maxn],y[maxn],z[maxn];int dp[maxm];
int dp2[51000];int main()
{int T;scanf("%d",&T);while(T--){int n,m,p;int sum=0;scanf("%d %d %d",&n,&m,&p);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]);sum+=x[i]*z[i];}memset(dp,0x3f3f3f3f,sizeof(dp));dp[0]=0;for(int i=0; i<n; i++){int num=v[i];int ba=1;while(num>=ba){int energy=t[i]*ba;int siz=u[i]*ba;for(int i=p+100; i>=energy; i--)dp[i]=min(dp[i],dp[i-energy]+siz);num-=ba;ba*=2;}if(num>0){int energy=t[i]*num;int siz=u[i]*num;for(int i=p+100; i>=energy; i--)dp[i]=min(dp[i],dp[i-energy]+siz);}}int minsize=0x3f3f3f3f;for(int i=p; i<=p+100; i++)minsize=min(minsize,dp[i]);if(sum<minsize||minsize==0x3f3f3f3f){printf("TAT\n");continue;}int mincost=0x3f3f3f3f;memset(dp2,0,sizeof(dp2));for(int i=0; i<m; i++){int num=z[i];int ba=1;while(num>=ba){int carry=x[i]*ba;int cost=y[i]*ba;for(int i=50000; i>=cost; i--){dp2[i]=max(dp2[i],dp2[i-cost]+carry);if(dp2[i]>=minsize){mincost=min(mincost,i);}}num-=ba;ba*=2;}if(num>0){int carry=x[i]*num;int cost=y[i]*num;for(int i=50000; i>=cost; i--){dp2[i]=max(dp2[i],dp2[i-cost]+carry);if(dp2[i]>=minsize){mincost=min(mincost,i);}}}}if(mincost!=0x3f3f3f3f)printf("%d\n",mincost);elseprintf("TAT\n");}return 0;
}

hdu5445 Food Problem(背包)相关推荐

  1. hdu5445 Food Problem(多重背包)(*)

    题目链接 Food Problem Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...

  2. HDU Problem 2062 Bone Collector【01背包】

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  3. zcmu Problem C: kirito's 星爆气流斩(背包+二进制优化)

    [题目] Problem C: kirito's 星爆气流斩 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 143  Solved: 34 [Subm ...

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

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

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

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

  6. gym101064L The Knapsack problem 超大容量完全背包

    https://codeforces.com/gym/101064/problem/L 由于是完全背包,所以我们可以合并背包容量 设F(S)为S容量的最大值,我们可以把他分成两部分F(S)=F(A)+ ...

  7. 【 FZU - 2214 】Knapsack problem(逆向0-1背包)

    题干: Given a set of n items, each with a weight w[i] and a value v[i], determine a way to choose the ...

  8. hdu 5445 Food Problem (多重背包)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5445 题解:一看就像多重背包就是怎么看都不好做.但是这里有点明显的就是有两个背包,一个是糖 ...

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

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

最新文章

  1. 进来进程有人问表空间的迁移问题
  2. ansible代码发布系统
  3. python完全新手教程-小白的Python新手教程​
  4. 计算机常用端口一览表
  5. 郑州轻工业学院第八届玲珑杯校赛题解
  6. 使用javamail进行邮件发送
  7. 生成jar文件的方法
  8. zip-gzip-bzip2_压缩文件
  9. 【BZOJ3223】文艺平衡树,Splay反转区间
  10. 聊聊一致性Hash在负载均衡中的应用
  11. AcWing 859. Kruskal算法求最小生成树(稀疏图)
  12. Unity之UGUI初探—按钮动画
  13. SDUT 1953 Idol
  14. windows系统服务器打补丁,给Windows打补丁太难?2招搞定
  15. 计算机网络原理自考真题2020年真题,2020年10月自考04741计算机网络原理真题及答案...
  16. IEEE1588工业以太网交换机
  17. Windows10 1809版本下载地址
  18. Kibana关联ES查询数据
  19. EasyExcel学习笔记
  20. 直播系统解决方案:直播平台如何开发搭建

热门文章

  1. 中国电信LifePad欲争抢中国平板电脑市场
  2. 第十章 Java数据结构
  3. 计算机研究热点发展趋势,[精品]计算机科学前沿热点及发展趋势.doc
  4. L-System分形小结
  5. 美国9·11事件永远不能忘记的22张照片(内附高清大图)
  6. 问答网站Quora副总裁杨蕾博士:让知识改变世界
  7. keras搭建Unet实现图像分割
  8. matlab 窄带高斯过程仿真,噪声干扰信号的Matlab仿真.doc
  9. 一文解读广告投放全攻略,提升拓客效率
  10. 计算机的重要作用和正确使用的建议,引导孩子正确认识电脑和游戏的几点建议...