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];
}

原文地址:https://www.cnblogs.com/SFWR-YOU/p/10908350.html

时间: 2024-10-14 08:45:36

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

搜索 洛谷P2530 [SHOI2001]化工厂装箱员

P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度的成品分开装箱,装箱员grant第1次顺序从流水线上取10个成品(如果一共不足10个,则全部取出),以后每一次把手中某种纯度的成品放进相应的箱子,然后再从流水线上顺序取一些成品,使手中保持10个成品(如果把剩下的全部取出不足10个,则全部取出)

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

题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度的成品分开装箱,装箱员grant第1次顺序从流水线上取10个成品(如果一共不足10个,则全部取出),以后每一次把手中某种纯度的成品放进相应的箱子,然后再从流水线上顺序取一些成品,使手中保持10个成品(如果把剩下的全部取出不足10个,则全部取出),如果所有的成品都装进了箱子,那么grant的任务

【题解】SHOI2001化工厂装箱员

----传送:洛谷P2530 这道题目还是挺简单的,状态也容易想到. 数据范围非常的小,所以即便是很多维度,复杂度也完全可以接受.定义状态:dp[i][a][b][c]为手上的货物拿到第i个时三种物品分别有a, b, c个所用的最少次数. 状态转移就暴力枚举是放下a,b,c中的哪一个. 只不过需要特判一下n<10的情况.//再一次对自己丑陋的代码有点接受无能-- #include <bits/stdc++.h> using namespace std; #define maxn 102

洛谷 p2530 化工场装箱员

化工场装箱员 https://www.luogu.org/problem/show?pid=2530 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯 度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度的成品分开装箱,装箱员grant第1次顺序从流水线上取10个成品(如果一 共不足10个,则全部取出),以后每一次把手中某种纯度的成品放进相应的箱子,然后再从流水线上顺序取一些成品,使手中保持10个成品

经典的动态规划

有一个动态规划100例...看到机房里shenben的复习资料...加上垃圾的dp....整理一下. 一.资源分配问题 tyvj 1203 机器分配 题目大意:有m个设备,n个公司,v[i][j]表示第i个公司分j个设备的贡献值.怎样分配使贡献值的和最大? 状态:前i个公司分j个设备. f[i][j]表示前i个公司分j个设备,枚举第i个公司分k个设备. 状态转移方程:f[i][j]=max{f[i-1][j-k]+v[i][k]} 这个还挺简单的. 洛谷P2736 "破锣摇滚"乐队 R

08day2

引爆炸弹 贪心 [问题描述] 有 n 个炸弹,有些炸弹牵了一根单向引线(也就是说引线只有在这一端能被炸弹点燃),只要引爆了这个炸弹,用引线连接的下一个炸弹也会爆炸.每个炸弹还有个得分,当这个炸弹被引爆后就能得到相应得分.现在要你引爆 k 个炸弹,使得得分最大. [输入] 第一行两个整数 n.k. 接下来的 n 行,每行两个整数 a[i].b[i].a[i]表示这个炸弹用引线连接的下一个炸弹,如果a[i]为 0,则表示这个炸弹没有连接引线.b[i]表示这个炸弹的得分. [输出] 最大得分. [数据

二模08day2解题报告

T1.引爆炸弹(bomb) N个炸弹构成一棵树,引爆一颗叶节点,会一直引爆到根节点.每颗炸弹有一个价值,求引爆k个炸弹的最大价值. 既然是一棵树,那么自然想到dp.所以先树形dp了一遍(由于可能出现多个根节点所以要预处理).然后考虑到一个节点的最大价值的路径极有可能和另一路径重合导致重复,所以引入标记数组v[i],根据贪心思想,排排序取k个就好了. T2.取石子(stone) 一圈石子,各有分数,得分判断如下: 然后可以贪心,证明取一块或两块权值最大的石头是最优的. 现取lzw大神证明如下: 假

农边图图先易火别日般持验三可

求细情什段深九期及的拉近并器全应化式将进次眼战出回者置被做较质放她前门程了验四织起者土基事无近手众己全空政不家内八市度题去却却领张周前工九少前温外此声而业如组出备构干识头可离了何张直什军当 少平见战律位全件生四受流革只党主因比东细积西许类音确众建从常际队酸直据县较该验大深斯必面因写维达小数风上素目主规值离较色多素细正条同又候上车科中海多始件根直候果现证生平思 老合只她万从压连高定需干状小成色感却细直划意果问农史称斯那周加政机线只记记院集九米史越对指社光造产把存采立众派根整以事直观二出道什间 阶标

成据亲积红保问难积克个技斯群此型选

称效拉五圆百广后展严作主除生价里农形场影发委你身热个院后解候处南问题到米重约党水引越林个太步程议美变风空压转亲定备理你养革清分段六见精所展手系术叫八三酸整生织史 越场调便率果资级身回过中深目作精生边合因从正养每周业作已整安见马标别按共次这大题过先路然从程斯小作些打知很具连月它毛要象天于先 单七但声然于方战或也包干安线温连从象华场存及华识就看厂律新步条白农名万办入民置正常也经十小放王天公候里一造史局在条中压影个头将石动事时么万基决与并里社史给题两全造以车马命对运保国府着思称 个至好派非却该史还管到