洛谷 p2530 化工场装箱员(资源型)
化工场装箱员
https://www.luogu.org/problem/show?pid=2530
118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯 度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度的成品分开装箱,装箱员grant第1次顺序从流水线上取10个成品(如果一 共不足10个,则全部取出),以后每一次把手中某种纯度的成品放进相应的箱子,然后再从流水线上顺序取一些成品,使手中保持10个成品(如果把剩下的全部 取出不足10个,则全部取出),如果所有的成品都装进了箱子,那么grant的任务就完成了。
由于装箱是件非常累的事情,grant希望他能够以最少的装箱次数来完成他的任务,现在他请你编个程序帮助他。
【输入格式】
第1行为n(1<=n<=100),为成品的数量
以后n行,每行为一个大写字母A,B或C,表示成品的纯度。
【输出格式】
仅一行,为grant需要的最少的装箱次数。
【输入样例】worker.in
11
A
B
C
A
B
C
A
B
C
A
B
【输出样例】worker.out
3
dfs TLE,得70,
状态:装了s次,从流水线上取下了d个,手中有a个A产品,b个B产品,c个C产品深搜
#include<cstdio>
#include<iostream>
using namespace std;
int n,x[],f[][][];
int A,B,C,ans=;
char c;
void dfs(int s,int d,int a,int b,int c)
{
if(d==n)
{
ans=min(ans,s+(a>)+(b>)+(c>));
return;
}
while(d<n)
{
if(a+b+c!=)
{
++d;
switch(x[d])
{
case :a++;break;
case :b++;break;
case :c++;break;
}
}
else break;
}
if(a) dfs(s+,d,,b,c);
if(b) dfs(s+,d,a,,c);
if(c) dfs(s+,d,a,b,);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
cin>>c;
if(c=='A') x[i]=,A++;
else if(c=='B') x[i]=,B++;
else x[i]=,C++;
}
dfs(,,,,);
printf("%d",ans);
}
记忆化搜索 AC
f[d][a][b][c]=s 表示的意义同上
状态转移:f[d][a][b][c]=min(f[d][0][b][c],f[d][a][0][c],f[d][a][b][0])+1
初始化:f数组赋为极大值
#include<cstdio>
#include<iostream>
using namespace std;
int n,x[],f[][][][];
int A,B,C;
char c;
int dfs(int d,int a,int b,int c)
{
if(d==n)
{
f[d][a][b][c]=(a>)+(b>)+(c>);
return f[d][a][b][c];
}
while(d<n)
{
if(a+b+c!=)
{
++d;
switch(x[d])
{
case :a++;break;
case :b++;break;
case :c++;break;
}
}
else break;
}
if(f[d][a][b][c]<) return f[d][a][b][c];
if(a) f[d][a][b][c]=min(f[d][a][b][c],dfs(d,,b,c)+);
if(b) f[d][a][b][c]=min(f[d][a][b][c],dfs(d,a,,c)+);
if(c) f[d][a][b][c]=min(f[d][a][b][c],dfs(d,a,b,)+);
return f[d][a][b][c];
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
cin>>c;
if(c=='A') x[i]=,A++;
else if(c=='B') x[i]=,B++;
else x[i]=,C++;
}
for(int l=;l<=n;l++)
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<=;k++)
f[l][i][j][k]=;
printf("%d",dfs(,,,));
}
洛谷 p2530 化工场装箱员(资源型)的更多相关文章
- 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告
P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B ...
- 洛谷P2530 [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...
- 洛谷2530(codevs2098)化工厂装箱员
题目:https://www.luogu.org/problemnew/show/P2530 dp或搜索. dp做法就是 当前值+1 转移到 当前某一维为0.位置前进了c位 的地方.但没写. 写了搜索 ...
- 斜率优化dp学习笔记 洛谷P3915[HNOI2008]玩具装箱toy
本文为原创??? 作者写这篇文章的时候刚刚初一毕业…… 如有错误请各位大佬指正 从例题入手 洛谷P3915[HNOI2008]玩具装箱toy Step0:读题 Q:暴力? 如果您学习过dp 不难推出d ...
- 化工厂装箱员(洛谷 P2530)
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- 化工厂装箱员 洛谷 p2530
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- 洛谷 P3195 [HNOI2008] 玩具装箱
链接: P3195 题意: 给出 \(n\) 个物品及其权值 \(c\),连续的物品可以放进一个容器,如果将 \(i\sim j\) 的物品放进一个容器,产生的费用是 \(\left(j-i+\sum ...
- 洛谷P1314 聪明的质监员
P1314 聪明的质监员 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: ...
- 洛谷P1314 聪明的质监员 题解
题目 聪明的质监员 题解 这道题和之前Sabotage G的那道题类似,都是用二分答案求解(这道题还要简单一些,不需要用数学推导二分条件,只需简单判断一下即可). 同时为了降低复杂度,肯定不能用暴力求 ...
随机推荐
- C++自学随笔
主要学习内容: 了解了IDE环境的含义 C++与C的区别: 新的数据类型:bool型 新的初始化方法:直接初始化int x(1024) 经过查找,了解了直接初始化与复制初始化的区别:"当用于 ...
- IDEA小插件之快速修改Maven多模块的工程版本
Github:https://github.com/zwjlpeng/versions 问题在Maven构建的多模块块程中,如果我们需要修改工程的版本号,会怎么操作呢example例如工程A包括了A- ...
- [转帖]Linux 下 DD 命令的使用详解
https://blog.csdn.net/noviblue/article/details/56012275 一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注 ...
- es6 const关键字
const是constant(常量)的缩写,const和 let一样,也是用来声明变量的,但是const是专门用于声明一个常量的,顾名思义,常量的值是不可改变的.以前用var声明的变量,想怎么改就怎么 ...
- 高性能页面加载技术--BigPipe设计原理及Java简单实现
1.技术背景 动态web网站的历史可以追溯到万维网初期,相比于静态网站,动态网站提供了强大的可交互功能.经过几十年的发展,动态网站在互动性和页面显示效果上有了很大的提升,但是对于网站动态网站的整体页面 ...
- Redis(一) 安装
选择在Linux下安装redis,现在采用虚拟机安装的centos7 进行安装的 1.安装gcc yum install gcc-c++ 2.下载redis安装包,在root目录下执行 wget ht ...
- Hibernate 之主键生成策略小总结
主键生成策略大致分两种: 手工控制策略 自动生成策略[框架自动生成和数据库自动生成] 手工控制策略: assigned:类型是任意的,需要在 save() 到数据库前,编码人员手工设置主键值,也就是调 ...
- m3u8 player
m3u8 player m3u8 是一种基于 HTTP Live Streaming 文件视频格式,它主要是存放整个视频的基本信息和分片(Segment)组成.目前 由 Apple.inc 率先提出的 ...
- Python动态规划求解最长递增子序列(LIS)
原始代码错误,移步博客查看O(N^2)及优化的O(N*logN)的实现:每天一道编程题--最长递增子序列
- BZOJ3156 防御准备(动态规划+斜率优化)
设f[i]为在i放置守卫塔时1~i的最小花费.那么显然f[i]=min(f[j]+(i-j)*(i-j-1)/2)+a[i]. 显然这是个斜率优化入门题.将不与i.j同时相关的提出,得f[i]=min ...