zoukankan      html  css  js  c++  java
  • 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需要的最少的装箱次数。

    ————————————————————————————————————

    又是一道对下标的利用,也是很像乌龟棋,还要将每次转化为每个,以及注意归零转移

    #include<bits/stdc++.h>
    using namespace std;
    int f[110][11][11][11],n;
    char ch;
    int main()
    {
        cin>>n;
        memset(f,63,sizeof(f));
        f[0][0][0][0]=0;
        for(int i=1;i<=n;i++)
        {
            cin>>ch;
            for(int a=0;a<=10;a++)
            for(int b=0;b<=10-a;b++)
            for(int c=0;c<=10-a-b;c++)
            {
                if(a+b+c>10)continue;
                if(ch=='A'&&a)f[i][a][b][c]=f[i-1][a-1][b][c];
                if(ch=='B'&&b)f[i][a][b][c]=f[i-1][a][b-1][c];
                if(ch=='C'&&c)f[i][a][b][c]=f[i-1][a][b][c-1];
                    f[i][0][b][c]=min(f[i][0][b][c],f[i][a][b][c]+1);
                    f[i][a][0][c]=min(f[i][a][0][c],f[i][a][b][c]+1);
                    f[i][a][b][0]=min(f[i][a][b][0],f[i][a][b][c]+1);
            }
        }
        cout<<f[n][0][0][0];
    }
  • 相关阅读:
    搭建Apache服务器并使用自签证书实现https访问
    常见加密算法
    awk命令用法
    systemd的新特性及常见的systemd unit类型分析
    kickstart文件制作与光盘镜像制作
    grub启动引导程序配置及命令行接口详解
    Linux启动流程(CentOS6)
    Linux相关网络命令
    rpm与yum,at与crontab,sed命令使用
    腾讯明眸极速高清升级2.0,助力韩国赛事超高清5G直播
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/10908350.html
Copyright © 2011-2022 走看看