zoukankan      html  css  js  c++  java
  • 搜索 洛谷P2530 [SHOI2001]化工厂装箱员

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

    输入输出样例

    输入样例#1:
    11
    A
    B
    C
    A
    B
    C
    A
    B
    C
    A
    B
    
    输出样例#1:
    3

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int n;
     7 int data[110],f[110][11][11][11];
     8 char a;
     9 bool check[110][11][11][11];
    10 int dfs(int num,int x,int y,int z){
    11     int tot=x+y+z;
    12     int tmp=0;
    13     for(int i=n-num+1;i<=n;i++){
    14         if(tot+tmp==10) break;
    15         if(data[i]==0) x++;
    16         if(data[i]==1) y++;
    17         if(data[i]==2) z++;
    18         tmp++;
    19     }
    20     if(check[num-tmp][x][y][z]) return f[num-tmp][x][y][z];
    21     check[num-tmp][x][y][z]=1;
    22     if(num==tmp){
    23         int t=3;
    24         if(x==0) t--;
    25         if(y==0) t--;
    26         if(z==0) t--;
    27         f[0][x][y][z]=min(f[0][x][y][z],t);
    28         return f[0][x][y][z];
    29     }
    30     if(x) f[num-tmp][x][y][z]=min(f[num-tmp][x][y][z],dfs(num-tmp,0,y,z)+1);
    31     if(y) f[num-tmp][x][y][z]=min(f[num-tmp][x][y][z],dfs(num-tmp,x,0,z)+1);
    32     if(z) f[num-tmp][x][y][z]=min(f[num-tmp][x][y][z],dfs(num-tmp,x,y,0)+1);
    33     return f[num-tmp][x][y][z];
    34 }
    35 int main(){
    36     scanf("%d",&n);
    37     for(int i=1;i<=n;i++){
    38         //scanf("%c",&a);
    39         cin>>a;
    40         data[i]=a-'A';
    41     }
    42     memset(f,0x3f3f3f3f,sizeof(f));
    43     printf("%d",dfs(n,0,0,0));
    44     return 0;
    45 }
  • 相关阅读:
    memcached与.NET的融合使用(二)
    memcached与.NET的融合使用(一)
    使用window2003安装邮件服务器最新实际操作记录
    2014 -> 2015
    数据挖掘入门 资料和步骤
    CSDN 论坛招聘区是不是有潜规则?在Cnblog招个人试试...
    C#薪水和前途
    面试准备
    面试准备
    面试准备
  • 原文地址:https://www.cnblogs.com/zwube/p/7008841.html
Copyright © 2011-2022 走看看