[SHOI2001]化工厂装箱员
题目描述
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需要的最少的装箱次数。
输入输出样例
- 11
- A
- B
- C
- A
- B
- C
- A
- B
- C
- A
- B
- 3
- 题解:
水题哈,明显状态可以定义为f[i][j][k][g]为前i个,10个中A,B,C数量分别为j,k,g个
然后转移枚举清空哪一位再加上新产生的即可.
另外 这题还卡输入....
- #include <algorithm>
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <cstdio>
- #include <cmath>
- using namespace std;
- const int N=;
- int s[N],f[N][][][],sum[N][];
- void work()
- {
- int n;char ch;
- scanf("%d",&n);
- for(int i=;i<=n;i++){
- ch=getchar();
- while(ch>'C'||ch<'A')ch=getchar();
- s[i]=ch-'A';
- for(int j=;j<=;j++)
- sum[i][j]=sum[i-][j]+(s[i]==j);
- }
- if(n<=){
- printf("%d\n",(sum[n][]>)+(sum[n][]>)+(sum[n][]>));
- return ;
- }
- int nxt,k1,k2,k3,tmp,inf;
- memset(f,/,sizeof(f));inf=f[][][][];
- f[][sum[][]][sum[][]][sum[][]]=;
- for(int i=;i<n;i++){
- for(int j=;j<=;j++)
- for(int k=;k<=;k++)
- for(int g=;g<=;g++){
- tmp=f[i][j][k][g];
- if(tmp==inf)continue;
- if(j){
- nxt=min(i+j,n);k1=sum[nxt][]-sum[i][];
- k2=k+sum[nxt][]-sum[i][];k3=g+sum[nxt][]-sum[i][];
- if(tmp+<f[nxt][k1][k2][k3])
- f[nxt][k1][k2][k3]=tmp+;
- }
- if(k){
- nxt=min(i+k,n);k1=j+sum[nxt][]-sum[i][];
- k2=sum[nxt][]-sum[i][];k3=g+sum[nxt][]-sum[i][];
- if(tmp+<f[nxt][k1][k2][k3])
- f[nxt][k1][k2][k3]=tmp+;
- }
- if(g){
- nxt=min(i+g,n);k1=j+sum[nxt][]-sum[i][];
- k2=k+sum[nxt][]-sum[i][];k3=sum[nxt][]-sum[i][];
- if(tmp+<f[nxt][k1][k2][k3])
- f[nxt][k1][k2][k3]=tmp+;
- }
- }
- }
- int ans=inf;
- for(int i=;i<=;i++){
- for(int j=;j<=;j++)
- for(int k=;k<=;k++){
- tmp=f[n][i][j][k]+(i!=)+(j!=)+(k!=);
- if(tmp<ans)ans=tmp;
- }
- }
- printf("%d\n",ans);
- }
- int main()
- {
- work();
- return ;
- }
[SHOI2001]化工厂装箱员的更多相关文章
- 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告
P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B ...
- [SHOI2001]化工厂装箱员(dp?暴力:暴力)
118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度 ...
- 洛谷P2530 [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...
- 解题:SHOI2001 化工厂装箱员
题面 题外话:从零开始的DP学习系列之壹(我真的不是在装弱,我DP真的就这么烂TAT) 从lyd那里学到了一点DP的小技巧,在设状态时可以先假装自己在做搜索,往一个函数里传了一些参数,然后把这些参数抓 ...
- 【题解】SHOI2001化工厂装箱员
————传送:洛谷P2530 这道题目还是挺简单的,状态也容易想到. 数据范围非常的小,所以即便是很多维度,复杂度也完全可以接受.定义状态:dp[i][a][b][c]为手上的货物拿到第i个时三种物品 ...
- SHOI2001化工厂装箱员——记忆化搜索
题目:https://www.luogu.org/problemnew/show/P2530 太弱了不会用DP,于是暴搜: 每次传进一个数组c记录当前状态各种物品有多少个,枚举取哪种物品,返回最小值, ...
- 化工厂装箱员(洛谷 P2530)
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- 化工厂装箱员 洛谷 p2530
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- Luogu 2530 化工厂装箱员
Written with StackEdit. Description \(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\ ...
随机推荐
- Python多线程案例
from time import ctime,sleep import threading def music(): for i in range(2): print ("I was lis ...
- 【iOS】swift init构造器
这几天在使用 Swift 重写原来的一个运动社交应用 SportJoin. 为什么要重写呢? 首先因为实在找不到设计师给我作图; 其次, 我也闲不下来, 想找一些项目做, 所以只好将原来的代码重写了. ...
- 项目Beta冲刺Day1
项目进展 李明皇 今天解决的进度 点击首页list相应条目将信息传到详情页 明天安排 优化信息详情页布局 林翔 今天解决的进度 前后端连接成功 明天安排 开始微信前端+数据库写入 孙敏铭 今天解决的进 ...
- 获取选中的radio的value值
html:<div id="bb"> <input name="cc" type="radio" value=" ...
- LDAP apacheds解决方案
Apache DS 配置与管理 LADP基本介绍 LDAP(轻量级目录访问协议)以目录的形式来管理资源(域用户,用户组,地址簿,邮件用户,打印机等等). 特点: 1. LDAP是一种网略协议而 ...
- spring-oauth-server实践:使用授权方式四:client_credentials 模式的客户端和服务端交互
spring-oauth-server入门(1-11)使用授权方式四:client_credentials 模式的客戶端 一.客户端逻辑 1.界面入口(credentials_access_token ...
- Tomcat8.0 配置环境
(1)首先安装JDk 下载jdk进行安装后进行配置环境 新增一个Java_Home的变量复制本地安装目录的路径:eg:C:\Program Files (x86)\Java\jdk1.8.0_141\ ...
- linux下查看mysql日志文件的方法
查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...
- powerdesigner将name的名字赋给comment
1 PowerDesigner中批量根据对象的name生成comment的脚本 执行方法:Open PDM -- Tools -- Execute Commands -- Run Script Vb ...
- Java课后练习
1.利用循环输出:************************* public class Shape { public static void main(String[] args) { for ...