\(\\\)

\(Description\)


传送带上按顺序传过来\(N\)个物品,一个有\(A,B,C\)三类。

每次装箱员手里只能至多拿十个,然后将手中三类物品中的一类装箱,才能接着拿或接着装箱,求完成整个序列的最少装箱次数。

  • \(N\in [1,100]\)

\(\\\)

\(Solution\)


这数据范围不是搜索乱搞

  • \(DP\)。设\(f[s][i][j][k]\)表示,当前已经取走了前\(s\)个,\(A\)类手里有\(i\)个,\(B\)类手里有\(j\)个,\(C\)类手里有\(k\)个,其余取出的全部已经装箱时,最少总装箱次数。有显然边界\(f[0][0][0][0]=1\)。

  • 于是暴力枚举状态,复杂度是\(\text O(100\times 10^3)=\text O(10^5)\)的。转移考虑先将手里的东西拿满,再放下其中一类物品。即计算将要达到的位置\(s'\),到\(s'\)时手里三类物品的个数\(x,y,z\),然后就只需要考虑放下哪一类的问题了。

    f[sum][0][y][z]=min(f[sum][0][y][z],f[s][i][j][k]+1);
    f[sum][x][0][z]=min(f[sum][x][0][z],f[s][i][j][k]+1);
    f[sum][x][y][0]=min(f[sum][x][y][0],f[s][i][j][k]+1);
  • 注意到达位置需要考虑序列的边界,答案即为\(f[n][0][0][0]\)。

\(\\\)

\(Code\)


#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 110
#define R register
#define gc getchar
#define inf 2000000000
using namespace std; char c;
int n,ans=inf,a[N],f[N][11][11][11]; int main(){
scanf("%d",&n);
for(R int i=1;i<=n;++i){
c=gc();
while(!isalpha(c)) c=gc();
a[i]=(c=='A'?0:(c=='B'?1:2));
}
for(R int s=0;s<=n;++s)
for(R int i=0;i<=10;++i)
for(R int j=0;j<=10;++j)
for(R int k=0;k<=10;++k) f[s][i][j][k]=inf;
f[0][0][0][0]=0;
for(R int s=0;s<=n;++s)
for(R int i=0;i<=10;++i)
for(R int j=0;j<=10;++j)
for(R int k=0,sum,x,y,z;k<=10;++k)
if(f[s][i][j][k]<inf){
sum=min(n,s+(10-i-j-k)); x=i; y=j; z=k;
for(R int p=s+1;p<=sum;++p) a[p]==0?++x:(a[p]==1?++y:++z);
f[sum][0][y][z]=min(f[sum][0][y][z],f[s][i][j][k]+1);
f[sum][x][0][z]=min(f[sum][x][0][z],f[s][i][j][k]+1);
f[sum][x][y][0]=min(f[sum][x][y][0],f[s][i][j][k]+1);
}
printf("%d\n",f[n][0][0][0]);
return 0;
}

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

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

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

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

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

  3. 化工厂装箱员 洛谷 p2530

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

  4. [SHOI2001]化工厂装箱员

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

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

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

  6. Luogu 2530 化工厂装箱员

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

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

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

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

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

  9. 洛谷2530(codevs2098)化工厂装箱员

    题目:https://www.luogu.org/problemnew/show/P2530 dp或搜索. dp做法就是 当前值+1 转移到 当前某一维为0.位置前进了c位 的地方.但没写. 写了搜索 ...

随机推荐

  1. 【19】AngularJS 应用

    AngularJS 应用 现在是时候创建一个真正的 AngularJS 单页 Web 应用(single page web application,SPA)了. AngularJS 应用实例 现在可以 ...

  2. 【BZOJ2434】阿狸的打字机(fail树,DFS序)

    题意: 1<=N<=10^5 1<=M<=10^5 输入总长<=10^5   思路: From http://blog.csdn.net/lych_cys/article ...

  3. 【Java基础】Java基本数据类型与位运算

    1.赋值运算符 赋值使用操作符“=”.它的意思是“取右边的值(即右值),把它复制给左边(即左值)”.右值可以是任何 常数.变量或者表达式 (只要它能 生成 一个值就行).但左值必须是一个明确的,已命名 ...

  4. MYSQL中的主要查询方法

    #简单查询 #查询表中的所有数据SELECT * FROM test; #查询表中的指定列的数据SELECT cid,cname FROM test; #过滤重复的数据SELECT DISTINCT ...

  5. BZOJ(4) 1050: [HAOI2006]旅行comf

    1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3984  Solved: 2236[Submit][St ...

  6. Ubuntu 16.04通过Unity Tweak Tool实现点击图标最小化

    1.通过Ubuntu软件中心安装Unity Tweak Tool 2.设置

  7. 战术网络安全检查表 | Symantec Connect

    "知己知彼,百战不殆: 不知彼而知己,一胜一负: 不知彼,不知己,每战必殆." 孙子(中国古代军事家). 孙子的话在今日仍能够使我们产生共鸣. 机构只有了解敌人和自己优缺点才能在持 ...

  8. UML中类图的四种关系及其代码实现

    在uml图中 最复杂的也就是泛化,实现.依赖,关联.这四种关系了,假设弄清了这几种关系那么在理解UML图的时候就会变得轻车熟路了! 假设你对着几种关系一点都不熟悉的话能够看一下uml中的四种关系.这篇 ...

  9. CSS垂直居中完美有用实例

    <!DOCTYPE HTML>           <html>            <head>             <meta meta chars ...

  10. Bing Maps进阶系列六:使用Silverlight剪切(Clip)特性实现Bing Maps的迷你小地图

    Bing Maps进阶系列六:使用Silverlight剪切(Clip)特性实现Bing Maps的迷你小地图 Bing Maps Silverlight Control虽然为我们提供了简洁.方面的开 ...