BZOJ1222_ 产品加工_KEY
2024-09-11 23:01:07
我们设f[i]表示用机器A加工,时间还剩下i时的最优加工时间。
对于每一个时间可以加工的物品,有以下几个选择:
1、用机器A加工
2、用机器B加工
3、A和B一起加工
所以得到方程:
f[j]+=a[i][2]//用机器B加工,所以时间还剩j。
f[j]=min(f[j],f[j-a[i][1])(j>=a[i][1])//用机器A加工,所以由j-a[i][1]转移来。
f[j]=min(f[j],f[j-a[i][3]]+a[i][3])//用A、B一起加工,因为A也要出力,B也要出力,在减去a[i][3]的同时也要加上a[i][3]。
code:
/**************************************************************
Problem: 1222
User: yekehe
Language: C++
Result: Accepted
Time:2084 ms
Memory:1052 kb
****************************************************************/ #include <cstdio>
using namespace std;
inline int read(){
char c;while(c=getchar(),(c<''||c>'')&&c!='-');int x=,y=;c=='-'?y=-:x=c-'';
while(c=getchar(),c>=''&&c<='')x=x*+c-'';return x*y;
}
inline int min(int x,int y){return x<y?x:y;}
inline int max(int x,int y){return x>y?x:y;}
int n,a[][],f[];
int main(){
n=read();
int m=;
for(int i=;i<=n;i++){
a[i][]=read();a[i][]=a[i][]==?:a[i][];
a[i][]=read();a[i][]=a[i][]==?:a[i][];
a[i][]=read();a[i][]=a[i][]==?:a[i][];
m+=min(min(a[i][],a[i][]),a[i][]);
}
f[]=;
for(int i=;i<=n;i++){
for(int j=m;j>=;j--){
f[j]+=a[i][];
if(j>=a[i][])f[j]=min(f[j],f[j-a[i][]]);
if(j>=a[i][])f[j]=min(f[j],f[j-a[i][]]+a[i][]);
}
}
int ans=;
for(int i=;i<=m;i++)ans=min(ans,max(i,f[i]));
printf("%d",ans);
}
最新文章
- Js 变量声明提升和函数声明提升
- Python 逐行修改txt每条记录的内容
- SQL Server 通过重建方式还原 master 数据库
- React入门--------组件的生命周期
- 网站常用css必备css reset
- 在html使用a标签 直接下载图片 不通过后台实现直接下载
- 收集SQLServer线程等待信息
- UESTC_Can You Help God Wu CDOJ 582
- jquery mobile 入门级实战1
- What the difference between rebuild index and re-organize index?
- C++ 哈希表 (hashtable) 用于保存简单的数据,及数据查找,数据删除
- Java程序员必备知识-多线程框架Executor详解
- [HEOI2014]逻辑翻译(分治)
- kali漏洞扫描
- javascript es6系列教程 - 不定参数与展开运算符(...)
- Graph Database &; 图形数据库
- dfs小练 【dfs】
- [转]SQL Server 性能调优(内存)
- cmake 生成VS项目文件夹
- 关于JSON可能出现的错误,待更/todo