Luogu 2530 化工厂装箱员
Written with StackEdit.
Description
\(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\)种不同的纯度,\(A:100\%,B:1\%,C:0.01\%\),为了出售方便,必须把不同纯度的成品分开装箱,装箱员\(grant\)第\(1\)次顺序从流水线上取\(10\)个成品(如果一共不足\(10\)个,则全部取出),以后每一次把手中某种纯度的成品放进相应的箱子,然后再从流水线上顺序取一些成品,使手中保持\(10\)个成品(如果把剩下的全部取出不足\(10\)个,则全部取出),如果所有的成品都装进了箱子,那么\(grant\)的任务就完成了。
由于装箱是件非常累的事情,\(grant\)希望他能够以最少的装箱次数来完成他的任务,现在他请你编个程序帮助他。
Input
第\(1\)行为\(n(1<=n<=100)\),为成品的数量.
以后\(n\)行,每行为一个大写字母\(A,B\)或\(C\),表示成品的纯度。
Ouput
仅一行,为\(grant\)需要的最少的装箱次数.
Sample Input
11
A
B
C
A
B
C
A
B
C
A
B
Sample Output
3
Solution
- 显然是一道记忆化搜索.
- 这道题的价值在于,可以传一个数组作为函数变量,减少代码量.
我又水了一篇
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long LoveLive;
inline int read()
{
int out=0,fh=1;
char jp=getchar();
while ((jp>'9'||jp<'0')&&jp!='-')
jp=getchar();
if (jp=='-')
{
fh=-1;
jp=getchar();
}
while (jp>='0'&&jp<='9')
{
out=out*10+jp-'0';
jp=getchar();
}
return out*fh;
}
const int MAXN=150;
const int MAXT=30;
int f[MAXN][MAXT][MAXT][MAXT];
int n;
int x[MAXN];
int dfs(int k,int* g)
{
if(f[k][g[1]][g[2]][g[3]]!=-1)
return f[k][g[1]][g[2]][g[3]];
if(g[1]+g[2]+g[3]==0)
return 0;
int &res=f[k][g[1]][g[2]][g[3]];
res=inf;
int j;
for(int i=1;i<=3;++i)
{
if(g[i]>0)
{
int t=g[i],t1=g[1],t2=g[2],t3=g[3];
g[i]=0;
for(j=k;j<=n&&j<=(k+t-1);++j)
++g[x[j]];
res=min(res,dfs(j,g)+1);
g[1]=t1,g[2]=t2,g[3]=t3;
}
}
return res;
}
int main()
{
memset(f,-1,sizeof f);
n=read();
for(int i=1;i<=n;++i)
{
char c[2];
scanf("%s",c);
x[i]=c[0]-'A'+1;
}
int i;
int g[4]={0};
for(i=1;i<=n&&i<=10;i++)
++g[x[i]];
int ans=dfs(i,g);
printf("%d\n",ans);
return 0;
}
Luogu 2530 化工厂装箱员的更多相关文章
- 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告
P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B ...
- 化工厂装箱员(洛谷 P2530)
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- 化工厂装箱员 洛谷 p2530
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- [SHOI2001]化工厂装箱员(dp?暴力:暴力)
118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度 ...
- 洛谷P2530 [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...
- [ SHOI 2001 ] 化工厂装箱员
\(\\\) \(Description\) 传送带上按顺序传过来\(N\)个物品,一个有\(A,B,C\)三类. 每次装箱员手里只能至多拿十个,然后将手中三类物品中的一类装箱,才能接着拿或接着装箱, ...
- 洛谷2530(codevs2098)化工厂装箱员
题目:https://www.luogu.org/problemnew/show/P2530 dp或搜索. dp做法就是 当前值+1 转移到 当前某一维为0.位置前进了c位 的地方.但没写. 写了搜索 ...
- 【Luogu】P2530化工厂装箱员(DP)
题目链接 不知道做出这道题是我能力的一个提升还是能力的回归. DP.设f[i][j][k][l]是已经取了i个产品,现在手里还拿着j件A,k件B,l件C,最小的操作数. 然后状转方程乱搞啊 #incl ...
随机推荐
- netty3---传统IO,NIO,nettyIO
传统: NIO: nettyIO: 每个服务生负责一个区域,每个服务生是一个线程.
- netty1---传统IO和NIO的区别
传统IO: package OIO; import java.io.IOException; import java.io.InputStream; import java.net.ServerSoc ...
- 【Python】进程和线程
多进程 多线程 ThreadLocal 进程vs线程 分布式进程 Top 学习廖老师的py官网的笔记 多任务的实现方式有三种方式: 1.多进程 2.多线程 3.多进程+多线程(这种比较复杂,实际很少采 ...
- FTP pure-ftpd 安装、管理
FTP简介 FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为文传协议,用户Internet上的控制文件的双向传输. FTP的主要作用,就是让用户链接上一个远 ...
- c++中小项堆声明和使用
c++默认是大顶堆,小顶堆有两种声明方法: 1.对于基本类型直接用 priority_queue<int, vector<int>, greater<int> >p ...
- Python 类的方法,下划线有什么不同?
问: 1,以一个下划线开头的命名 ,如_getFile2,以两个下划线开头的命名 ,如__filename3,以两个下划线开头和结尾的命名,如 __init__()4,其它这些命名有什么不同吗? 答:
- HDU 1337 && POJ 1218&& zju 1350 方法总结
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1337 杭电 http://poj.org/problem?id=1218清华 http://acm.zj ...
- [CTSC2008]祭祀river
Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都 会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组 ...
- jq限制字符个数
<script> $(document).ready(function () { //限制字符个数 $(".box-right .title a").each(func ...
- NFV及vIMS的部署实施
随着5G和物联网等领域的快速发展,移动数据业务飞速增长,而传统电信网络基于专用硬件的架构和封闭式的网元,已经成为运营商拓展新业务的严重障碍.NFV能够根据用户和业务需求灵活动态地进行网络资源配置,实现 ...