hdu5445 Food Problem(背包)
来源:互联网 发布:js在线解压缩工具下载 编辑:程序博客网 时间:2024/05/21 09:58
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); else printf("TAT\n"); } return 0;}
0 0
- hdu5445 Food Problem(背包)
- HDU 5445 Food Problem(多重背包)
- hdu 5445 Food Problem(多重背包)
- HDU 5445 Food Problem(多重背包)
- HDU 5445 Food Problem 解题报告(背包)
- hdu5445(两次多重背包)
- Hdu 5445 Food Problem 多重背包
- [HDU 5445]Food Problem[多重背包]
- HDU 5445 Food Problem 两次多重背包
- HDU 5445 Food Problem ACM/ICPC 2015 Changchun Online(二进制优化多重背包)
- hdu 5445 Food Problem 分组背包,二进制拆分
- HDU 5445 Food Problem 多重背包+二进制优化
- HDU 5445 Food Problem 2次背包,二进制优化
- 【HDU 5445】Food Problem(DP)
- hdu5445 || 2015长春网络赛1009题 多重背包问题
- Problem 1005 Fast Food
- HDU 5445 Food Problem
- HDU 5445 Food Problem
- 关于C++中获取图片传递给qml (Qt5.4)
- 黑马Android:XML序列化器
- mysql定时任务
- C++模板阶段性小结
- NOIP2015普及组-扫雷游戏
- hdu5445 Food Problem(背包)
- 多线程——等待-唤醒机制
- spring3.2.0完整包下载
- OC 07 设计模式
- arm文件系统 freeing init memory没有再往下执行
- 【转】实战Nginx与PHP(FastCGI)的安装、配置与优化
- html基础
- 象棋机器人 1 引言
- runOnUiThread更新主线程