比较简单的背包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. Redis 深度历险

    学习资料 https://juejin.im/book/5afc2e5f6fb9a07a9b362527 包括下面几方面的内容 基础 应用 原理 集群 拓展 源码 to be done

  2. Required String parameter 'images' is not present

    后台控制层控制为非必填即可: @RequestMapping("/addDo") @SJson @SLog(description = "Car_main") ...

  3. shell编程 之 echo命令和printf命令

    1 echo命令基本情况: echo显示普通字符:echo "i am studying shell"(有木有引号都可以) 支持转义字符:echo "\"hel ...

  4. 【转载】Latex定制章节编号格式和计数器

    原文: http://www.chengkaiblog.com/software-application/latex/customize-section-format-counter.html _1. ...

  5. CF1139A Even Substrings

    题目地址:CF1139A Even Substrings 一个数是偶数等价于其最后一位为偶数(2/4/6/8/0) 从左往右扫一遍,如果一个数是奇数则直接跳过,偶数则加上它对答案的贡献 这里的贡献应该 ...

  6. [Kubernetes]CentOS7下Etcd集群搭建

    Etcd简要介绍 Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息 Etcd构建自身高可用集群主要有三种形式: ①静态发现: 预先已知 Etcd 集 ...

  7. 关于Mac或Linux下GO的Permission denied提示错误

    有时候当你下载第三方库的时候,编译时会提示Permission denied 权限不足, 出现这种错误因为权限不够.其中一种办法是需要把你项目目录和go的pck.bin权限放开. chmod -R 7 ...

  8. Iterables vs. Iterators vs. Generators

    Reprinted from: Iterables vs. Iterators vs. Generators Occasionally I've run into situations of conf ...

  9. Linux动态库的编译与使用 转载【转】

    转自:http://www.cnblogs.com/leaven/archive/2010/06/11/1756294.html http://hi.baidu.com/linuxlife/blog/ ...

  10. Apollo-3.0本地编译

    Apollo-3.0本地编译 用docker编译所用的dev.x86_64.dockerfile文件(具体位置在apollo/docker/build)中有所有的依赖库或包, 还会执行一些shell脚 ...