洛谷 P2530 [SHOI2001]化工厂装箱员
来源:互联网 发布:去人声软件 编辑:程序博客网 时间:2024/06/09 20:08
题目描述
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
动态规划
考虑dp[k][x][y][z]表示已经取了k个物品,手中有Ax个,By个,Cz个。
依次枚举放回ABC的情况。
如:
dp[cur][x][y][z]=min(dp[cur][x][y][z],search(cur,0,y,z)+1);
边界
当k==n时
没有剩余的情况下显然装a,b,c的顺序就无所谓了,直接加上就好
注:
判断是否可以记忆化,一定要放在更新k之后。
#include<iostream>#include<cstring>#include<cstdio>using namespace std;int n,a[105],dp[105][15][15][15];bool flg[105][15][15][15];int search(int cur,int x,int y,int z){ int tot=x+y+z; for(int i=1;i<=10-tot;i++) { cur++; if(a[cur]==1) x++; if(a[cur]==2) y++; if(a[cur]==3) z++; if(cur==n) break; } if(flg[cur][x][y][z]) return dp[cur][x][y][z]; flg[cur][x][y][z]=1; if(cur==n) { dp[cur][x][y][z]=int(x>0)+int(y>0)+int(z>0); return dp[cur][x][y][z]; } dp[cur][x][y][z]=1e7; if(x) dp[cur][x][y][z]=min(dp[cur][x][y][z],search(cur,0,y,z)+1); if(y) dp[cur][x][y][z]=min(dp[cur][x][y][z],search(cur,x,0,z)+1); if(z) dp[cur][x][y][z]=min(dp[cur][x][y][z],search(cur,x,y,0)+1); return dp[cur][x][y][z];}int main(){ scanf("%d",&n); char tmp[11]; for(int i=1;i<=n;i++) { scanf("%s",tmp); a[i]=tmp[0]-'A'+1; } printf("%d\n",search(0,0,0,0)); return 0;}
1 0
- 洛谷 P2530 [SHOI2001]化工厂装箱员
- 洛谷 P2530 [SHOI2001]化工厂装箱员
- 洛谷 P2530 [SHOI2001] 化工厂装箱员
- 搜索 洛谷P2530 [SHOI2001]化工厂装箱员
- 洛谷P2530 [SHOI2001]化工厂装箱员
- shoi2001 化工厂装箱员
- 【SHOI2001】洛谷2530 化工厂装箱员
- Vijos P1323 化工厂装箱员(SHOI2001)题解
- 【codevs2098】【Tyvj1625】化工厂装箱员,煞笔的人打煞笔的DP
- Java_自动装箱_自动拆箱和String常量池(享员模式应用)
- 洛谷 P1049 装箱问题
- 洛谷 P1049 装箱问题
- 洛谷 P1049 装箱问题
- 洛谷P1049 装箱问题
- 装箱
- 装箱
- 装箱
- 装箱
- HomeBrew for mac to install node npm
- CodeForce 628D Magic Numbers( 数位DP )
- AVPlayer自定制视频播放器(1)——视频播放器基本实现
- Sql中Insert添加语句如何不重复
- Cf Edu 15 C 城市与信号塔[二分]
- 洛谷 P2530 [SHOI2001]化工厂装箱员
- leetcode #4: Median of Two Sorted Arrays
- Struts2学习之旅(2)
- Java容器五:Vector
- iOS简单使用description方法(参考大神博客+自己想法)
- C++之引用
- 淘宝API示例
- [基础算法]递归二分算法
- EditText焦点问题 Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法