比较简单的背包dp,设计状态f[i][j]表示到了前i个物品,第一台机器加工时间为j,第二台机器加工所用的最小时间,然后背包转移即可

本题卡空间,需要滚动数组优化

本题卡时间,稍微卡下常就行

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#define uint unsigned int
using namespace std;
uint dp[2][60005];
uint n;
uint v1[6005],v2[6005],v3[6005];
inline uint read()
{
uint f=1,x=0;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
uint min(uint x,uint y)
{
return x<y?x:y;
}
uint max(uint x,uint y)
{
return x>y?x:y;
}
int main()
{
n=read();
int s1=0;
int s2=0;
for(int i=1;i<=n;i++)
{
v1[i]=read(),v2[i]=read(),v3[i]=read();
s1+=v1[i]+v3[i];
s2+=v1[i]+v3[i];
}
if(s1<=s2)
{
memset(dp,0x3f,sizeof(dp));
if(v1[1])
{
dp[0][v1[1]]=0;
}
if(v2[1])
{
dp[0][0]=v2[1];
}
if(v3[1])
{
dp[0][v3[1]]=min(dp[0][v3[1]],v3[1]);
}
int now=1,past=0;
for(int i=2;i<=n;i++)
{
memset(dp[now],0x3f,sizeof(dp[now]));
for(int j=0;j<=s1;j++)
{
if(j>=v1[i]&&v1[i])
{
dp[now][j]=min(dp[now][j],dp[past][j-v1[i]]);
}
if(j>=v3[i]&&v3[i])
{
dp[now][j]=min(dp[now][j],dp[past][j-v3[i]]+v3[i]);
}
if(v2[i])
{
dp[now][j]=min(dp[now][j],dp[past][j]+v2[i]);
}
}
swap(now,past);
}
uint ans=0x3f3f3f3f;
for(int i=0;i<=s1;i++)
{
ans=min(ans,max(i,dp[past][i]));
}
printf("%u\n",ans);
return 0;
}else
{
memset(dp,0x3f,sizeof(dp));
if(v1[1])
{
dp[0][0]=v1[1];
}
if(v2[1])
{
dp[0][v2[1]]=0;
}
if(v3[1])
{
dp[0][v3[1]]=min(dp[0][v3[1]],v3[1]);
}
int now=1,past=0;
for(int i=2;i<=n;i++)
{
memset(dp[now],0x3f,sizeof(dp[now]));
for(int j=0;j<=s2;j++)
{
if(j>=v1[i]&&v1[i])
{
dp[now][j]=min(dp[now][j],dp[past][j]+v1[i]);
}
if(j>=v3[i]&&v3[i])
{
dp[now][j]=min(dp[now][j],dp[past][j-v3[i]]+v3[i]);
}
if(v2[i])
{
dp[now][j]=min(dp[now][j],dp[past][j-v2[i]]);
}
}
swap(now,past);
}
uint ans=0x3f3f3f3f;
for(int i=0;i<=s2;i++)
{
ans=min(ans,max(i,dp[past][i]));
}
printf("%u\n",ans);
return 0;
}
}

bzoj 1222的更多相关文章

  1. bzoj 1222 DP

    用w[i]表示在A中用了i的时间时在B中最少用多长时间,然后转移就可以了. 备注:这个边界不好定义,所以可以每次用一个cur来存储最优值,然后对w[i]赋值就可以了. /*************** ...

  2. bzoj 1222: [HNOI2001]产品加工 dp

    1222: [HNOI2001]产品加工 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 381  Solved: 218[Submit][Status ...

  3. Bzoj 1222: [HNOI2001]产品加工 动态规划

    1222: [HNOI2001]产品加工 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 486  Solved: 298[Submit][Status ...

  4. BZOJ 1222 产品加工(DP)

    某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工,所完成任 ...

  5. BZOJ 1222: [HNOI2001]产品加工

    F[i]表示第一个机器用了i的时间,第二个机器的最小时间 转移即可 #include<cstdio> #include<algorithm> using namespace s ...

  6. 【BZOJ 1222】 [HNOI2001] 产品加工(DP)

    Description 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机 ...

  7. BZOJ刷题指南(转)

    基础(65) 巨水无比(4):1214.3816:2B题:1000A+B:2462:输出10个1 模拟/枚举/暴力(15):4063傻子模拟:1968小学生暴力:1218前缀和暴力:3856读英文:4 ...

  8. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  9. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

随机推荐

  1. linux 僵屍进程

    参考链接 :  http://soft.chinabyte.com/os/5/12172005.shtml

  2. git 生成公钥 使用命令行无需输入用户名密码(windows)

    之前设置过一次,后来就忘记了,今天改完密码之后发现命令行clone时验证身份失败,重新设置公钥,记录一下 1. 由于之前设置过公钥,所以不用输入用户名密码就可以执行git命令.现在密码变了,取消公钥, ...

  3. D - Stone Division HackerRank - stone-division (博弈+搜索)

    题目链接:https://cn.vjudge.net/problem/HackerRank-stone-division 题目大意:给你n,m,然后是m个数.每一次你可以选择一个a[i],如果能被n整 ...

  4. MySql cmd下的学习笔记 —— 有关select的操作(in, and, where, like等等)

    为方便本节学习, 请先自行建立本表: 建一个商品表: create table goods ( -> goods_id mediumint(8) unsigned not null auto_i ...

  5. Python换行符问题:\r\n还是\n?

    今天写一个Python脚本去读取一个txt文件时,发现一个很有趣的现象: 如果这个文件是用atom编辑器写的,发现换行符是'\r'.这样一来去逐行读取数据就失效了,因为用open函数 去打开该文件re ...

  6. python3+requests库框架设计06-测试脚本

    在项目下新建TestCase文件夹,然后新建.py文件在文件中写关于接口具体的测试脚本,一般我喜欢按照模块来分,一个模块一个.py文件,建议以test开头命名文件 把配置文件改成这样 url:http ...

  7. boost::tokenizer详解

    tokenizer 库提供预定义好的四个分词对象, 其中char_delimiters_separator已弃用. 其他如下: 1. char_separator char_separator有两个构 ...

  8. 基于TCP(面向连接)的Socket编程

    基于TCP(面向连接)的Socket编程 一.客户端: 1.打开一个套接字(Socket); 2.发起连接请求(connect); 3.如果连接成功,则进行数据交换(read.write.send.r ...

  9. 011_docker内部各系统基本工具安装

    root@nginx-56b8c64cb4-t97vb:/# cat /etc/os-release #查看linux发行版本 PRETTY_NAME="Debian GNU/Linux 8 ...

  10. Win7开机卡在Windows Update 35%的解决办法

    一台Win7老机器,多年未清理,用DISM++清理后,开机重启一直卡在Windows Update 35%转圈圈数小时,无法进入系统. 强制按关机键,F8进入安全模式依然同样现象. 查阅MSDN后,有 ...