题目描述

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需要的最少的装箱次数。

输入输出样例

输入样例#1:

  1. 11
  2. A
  3. B
  4. C
  5. A
  6. B
  7. C
  8. A
  9. B
  10. C
  11. A
  12. B
输出样例#1:

  1. 3
  2.  
  3. 题解:
    水题哈,明显状态可以定义为f[i][j][k][g]为前i个,10个中A,B,C数量分别为j,k,g
    然后转移枚举清空哪一位再加上新产生的即可.
    另外 这题还卡输入....
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cstdio>
  6. #include <cmath>
  7. using namespace std;
  8. const int N=;
  9. int s[N],f[N][][][],sum[N][];
  10. void work()
  11. {
  12. int n;char ch;
  13. scanf("%d",&n);
  14. for(int i=;i<=n;i++){
  15. ch=getchar();
  16. while(ch>'C'||ch<'A')ch=getchar();
  17. s[i]=ch-'A';
  18. for(int j=;j<=;j++)
  19. sum[i][j]=sum[i-][j]+(s[i]==j);
  20. }
  21. if(n<=){
  22. printf("%d\n",(sum[n][]>)+(sum[n][]>)+(sum[n][]>));
  23. return ;
  24. }
  25. int nxt,k1,k2,k3,tmp,inf;
  26. memset(f,/,sizeof(f));inf=f[][][][];
  27. f[][sum[][]][sum[][]][sum[][]]=;
  28. for(int i=;i<n;i++){
  29. for(int j=;j<=;j++)
  30. for(int k=;k<=;k++)
  31. for(int g=;g<=;g++){
  32. tmp=f[i][j][k][g];
  33. if(tmp==inf)continue;
  34. if(j){
  35. nxt=min(i+j,n);k1=sum[nxt][]-sum[i][];
  36. k2=k+sum[nxt][]-sum[i][];k3=g+sum[nxt][]-sum[i][];
  37. if(tmp+<f[nxt][k1][k2][k3])
  38. f[nxt][k1][k2][k3]=tmp+;
  39. }
  40. if(k){
  41. nxt=min(i+k,n);k1=j+sum[nxt][]-sum[i][];
  42. k2=sum[nxt][]-sum[i][];k3=g+sum[nxt][]-sum[i][];
  43. if(tmp+<f[nxt][k1][k2][k3])
  44. f[nxt][k1][k2][k3]=tmp+;
  45. }
  46. if(g){
  47. nxt=min(i+g,n);k1=j+sum[nxt][]-sum[i][];
  48. k2=k+sum[nxt][]-sum[i][];k3=sum[nxt][]-sum[i][];
  49. if(tmp+<f[nxt][k1][k2][k3])
  50. f[nxt][k1][k2][k3]=tmp+;
  51. }
  52. }
  53. }
  54. int ans=inf;
  55. for(int i=;i<=;i++){
  56. for(int j=;j<=;j++)
  57. for(int k=;k<=;k++){
  58. tmp=f[n][i][j][k]+(i!=)+(j!=)+(k!=);
  59. if(tmp<ans)ans=tmp;
  60. }
  61. }
  62. printf("%d\n",ans);
  63. }
  64. int main()
  65. {
  66. work();
  67. return ;
  68. }
  1.  
  1.  

[SHOI2001]化工厂装箱员的更多相关文章

  1. 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告

    P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B ...

  2. [SHOI2001]化工厂装箱员(dp?暴力:暴力)

    118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度 ...

  3. 洛谷P2530 [SHOI2001]化工厂装箱员

    题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...

  4. 解题:SHOI2001 化工厂装箱员

    题面 题外话:从零开始的DP学习系列之壹(我真的不是在装弱,我DP真的就这么烂TAT) 从lyd那里学到了一点DP的小技巧,在设状态时可以先假装自己在做搜索,往一个函数里传了一些参数,然后把这些参数抓 ...

  5. 【题解】SHOI2001化工厂装箱员

    ————传送:洛谷P2530 这道题目还是挺简单的,状态也容易想到. 数据范围非常的小,所以即便是很多维度,复杂度也完全可以接受.定义状态:dp[i][a][b][c]为手上的货物拿到第i个时三种物品 ...

  6. SHOI2001化工厂装箱员——记忆化搜索

    题目:https://www.luogu.org/problemnew/show/P2530 太弱了不会用DP,于是暴搜: 每次传进一个数组c记录当前状态各种物品有多少个,枚举取哪种物品,返回最小值, ...

  7. 化工厂装箱员(洛谷 P2530)

    题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...

  8. 化工厂装箱员 洛谷 p2530

    题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...

  9. Luogu 2530 化工厂装箱员

    Written with StackEdit. Description \(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\ ...

随机推荐

  1. Python多线程案例

    from time import ctime,sleep import threading def music(): for i in range(2): print ("I was lis ...

  2. 【iOS】swift init构造器

    这几天在使用 Swift 重写原来的一个运动社交应用 SportJoin. 为什么要重写呢? 首先因为实在找不到设计师给我作图; 其次, 我也闲不下来, 想找一些项目做, 所以只好将原来的代码重写了. ...

  3. 项目Beta冲刺Day1

    项目进展 李明皇 今天解决的进度 点击首页list相应条目将信息传到详情页 明天安排 优化信息详情页布局 林翔 今天解决的进度 前后端连接成功 明天安排 开始微信前端+数据库写入 孙敏铭 今天解决的进 ...

  4. 获取选中的radio的value值

    html:<div id="bb"> <input  name="cc" type="radio" value=" ...

  5. LDAP apacheds解决方案

    Apache DS 配置与管理   LADP基本介绍 LDAP(轻量级目录访问协议)以目录的形式来管理资源(域用户,用户组,地址簿,邮件用户,打印机等等).   特点: 1. LDAP是一种网略协议而 ...

  6. spring-oauth-server实践:使用授权方式四:client_credentials 模式的客户端和服务端交互

    spring-oauth-server入门(1-11)使用授权方式四:client_credentials 模式的客戶端 一.客户端逻辑 1.界面入口(credentials_access_token ...

  7. Tomcat8.0 配置环境

    (1)首先安装JDk 下载jdk进行安装后进行配置环境 新增一个Java_Home的变量复制本地安装目录的路径:eg:C:\Program Files (x86)\Java\jdk1.8.0_141\ ...

  8. linux下查看mysql日志文件的方法

    查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...

  9. powerdesigner将name的名字赋给comment

    1 PowerDesigner中批量根据对象的name生成comment的脚本 执行方法:Open PDM -- Tools -- Execute Commands -- Run Script Vb ...

  10. Java课后练习

    1.利用循环输出:************************* public class Shape { public static void main(String[] args) { for ...