【bzoj1222】[HNOI2001]产品加工 背包dp
题目描述
某加工厂有A、B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成。由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工,所完成任务又会不同。某一天,加工厂接到n个产品加工的任务,每个任务的工作量不尽一样。你的任务就是:已知每个任务在A机器上加工所需的时间t1, B机器上加工所需的时间t2及由两台机器共同加工所需的时间t3,请你合理安排任务的调度顺序,使完成所有n个任务的总时间最少。
输入
输入共n+1行第1行为 n。 n是任务总数(1≤n≤6000)第i+1行为3个[0,5]之间的非负整数t1,t2,t3,分别表示第i个任务在A机器上加工、B机器上加工、两台机器共同加工所需要的时间。如果所给的时间t1或t2为0表示任务不能在该台机器上加工,如果t3为0表示任务不能同时由两台机器加工。
输出
最少完成时间
样例输入
5
2 1 0
0 5 0
2 4 1
0 0 3
2 1 1
样例输出
9
题解
背包dp
由于可以把所有需要共同加工的产品在一开始就一起加工完,然后在各自加工各自的,所以产品之间是互不影响的。
于是就可以设$f[i][j]$表示加工前$i$个物品,A花费时间为$j$时,B花费的最小时间。那么直接跑背包dp即可。由于内存限制,需要使用滚动数组。
时间复杂度$O(3n*5n)=O(能过)$。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int f[2][30010];
inline void gmin(int &a , const int &b)
{
if(a > b) a = b;
}
int main()
{
int n , m , i , d , a , b , c , j , ans = 1 << 30;
scanf("%d" , &n) , m = 5 * n;
memset(f , 0x3f , sizeof(f)) , f[0][0] = 0;
for(i = d = 1 ; i <= n ; i ++ , d ^= 1)
{
scanf("%d%d%d" , &a , &b , &c);
memset(f[d] , 0x3f , sizeof(f[d]));
if(a) for(j = a ; j <= m ; j ++ ) gmin(f[d][j] , f[d ^ 1][j - a]);
if(b) for(j = 0 ; j <= m ; j ++ ) gmin(f[d][j] , f[d ^ 1][j] + b);
if(c) for(j = c ; j <= m ; j ++ ) gmin(f[d][j] , f[d ^ 1][j - c] + c);
}
for(i = 1 ; i <= m ; i ++ ) gmin(ans , max(i , f[n & 1][i]));
printf("%d\n" , ans);
return 0;
}
【bzoj1222】[HNOI2001]产品加工 背包dp的更多相关文章
- BZOJ1222: [HNOI2001]产品加工(诡异背包dp)
Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 907 Solved: 587[Submit][Status][Discuss] Descriptio ...
- BZOJ1222[HNOI2001]产品加工——DP
题目描述 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工 ...
- bzoj1222: [HNOI2001]产品加工--DP
DP神题orz dp[i]表示机器1工作i小时,机器2工作dp[i]小时 那么对于每个任务: 选1:dp[i]=dp[i-a]; 选2:dp[i]=dp[i]+b; 选1+2:dp[i]=dp[i-c ...
- BZOJ1222 [HNOI2001]产品加工 - 动态规划- 背包
题解 怎么看都不像是个背包,直到我看了题解→_→, 第一次碰到这么奇怪的背包= = 定一个滚动数组$F_i$, $i$表示机器$a$用了$i$的时间, $F_i$表示机器$b$用了$F_i$的时间, ...
- 【BZOJ 1222】 [HNOI2001] 产品加工(DP)
Description 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机 ...
- bzoj1222: [HNOI2001]产品加工
注意时间都是 <= 5的.. #include<cstdio> #include<cstring> #include<cstdlib> #include< ...
- 【BZOJ1222】[HNOI2001]产品加工 DP
[BZOJ1222][HNOI2001]产品加工 Description 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同 ...
- bzoj 1222: [HNOI2001]产品加工 dp
1222: [HNOI2001]产品加工 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 381 Solved: 218[Submit][Status ...
- Bzoj 1222: [HNOI2001]产品加工 动态规划
1222: [HNOI2001]产品加工 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 486 Solved: 298[Submit][Status ...
随机推荐
- UVA Mega Man's Mission(状压dp)
把消灭了那些机器人作为状态S,预处理出状态S下可以消灭的机器人,转移统计方案.方案数最多16!,要用64bit保存方案. #include<bits/stdc++.h> using nam ...
- HTML 5.1 的 14 个新特性(含使用案例)
HTML5 属于万维网联盟 (W3C), 这个组织为整个网络界提供了标准,如此形成的协议可在全世界通行.在 2016 年 11 月, W3C 对长期行使的 HTML 5 标准进行了更新,它是2年内的第 ...
- pytho线程信号量
pytho线程信号量 import threading,time def going(num,sleep_time): semaphore.acquire()#启动允许执行 print("g ...
- 零基础快速入门SpringBoot2.0教程 (四)
一.JMS介绍和使用场景及基础编程模型 简介:讲解什么是小写队列,JMS的基础知识和使用场景 1.什么是JMS: Java消息服务(Java Message Service),Java平台中关于面向消 ...
- question 002: dev c++ 当中如何调整字体大小?How to get the first program with C++? c++属于什么软件?
方法:按住ctrl+鼠标滑轮滚动 c++属于系统软件还是应用软件? 说哪个都不对,编译之前属于应用软件,after compile ,it belongs to system software. #i ...
- 【转】 bind1st bind2nd的使用
以前在使用stl的过程中发现bind1st和bind2nd这两个函数,当时不太理解什么意思,今天在网上查了一下相关资料发现竟然很简单,下面我就具体解释一下他们的用法. bind1st和bind2nd函 ...
- 用dom1来实现,根据光标移动自动给表单加上背景色,光标移开自动去除背景色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 嵌入式linux:通过qemu模拟mini2440开发环境
1 编译安装QEMU 首先下载qemu for mini2440,直接打包下载 http://repo.or.cz/w/qemu/mini2440.git/snapshot/HEAD.tar.gz ...
- 22.VUE学习之-replice删除当前评论条数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- du 与df 统计系统磁盘不一致原因与解决方法
事件起因: 同事发现云主机磁盘系统盘满了,准备清理系统盘,便利用du 命令统计了根目录下各文件夹的大小,发现统计的各文件夹的大小总和 加起来比 df 命令查看到的系统盘所使用空间 要小很多.这里记录下 ...