传送门1
传送门2
写在前面:数据结构题写多了,写dp反而不会写了
思路:刚开始以为是贪心,很快发现这是错误的233(反例很好找的),后来看到n才100,就动了一些歪脑筋打暴力,后来才发现是一个可以记忆化搜索的DP,f[i][x][y][z]指流水线上剩余i个产品,手里有x个A,y个B,z个C时所需要的最少装箱次数,显然我们可以以此转移三种状态:装箱A,装箱B,装箱C,同时记忆化搜索除去了很多重复的状态(比如在流水线上一堆C的情况下装2个A,3个B与装3个B, 2个A效果一样)
注意:别打暴搜,注意细节!
代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[110],f[110][20][20][20];
char ch;
bool flag[110][20][20][20];
int dfs(int remain,int x,int y,int z)
{int tot=x+y+z,k=0;for (int i=n-remain+1;i<=n;i++){if (tot+k==10) break;if (a[i]==1) x++;if (a[i]==2) y++;if (a[i]==3) z++;k++;}if (flag[remain-k][x][y][z]) return f[remain-k][x][y][z];flag[remain-k][x][y][z]=1;if (remain-k==0){f[0][x][y][z]=min(f[0][x][y][z],(x>0)+(y>0)+(z>0));//没有剩余的情况下显然装a,b,c的顺序就无所谓了,直接加上就好return f[0][x][y][z];}if (x) f[remain-k][x][y][z]=min(f[remain-k][x][y][z],dfs(remain-k,0,y,z)+1);if (y) f[remain-k][x][y][z]=min(f[remain-k][x][y][z],dfs(remain-k,x,0,z)+1);if (z) f[remain-k][x][y][z]=min(f[remain-k][x][y][z],dfs(remain-k,x,y,0)+1);return f[remain-k][x][y][z];
}
main()
{scanf("%d",&n);for (int i=1;i<=n;i++){ch=getchar();while (ch<'A'||ch>'C') ch=getchar();a[i]=ch-'A'+1;}memset(f,63,sizeof(f));printf("%d",dfs(n,0,0,0));
}

【codevs2098】【Tyvj1625】化工厂装箱员,煞笔的人打煞笔的DP相关推荐

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

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

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

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

  3. 【SHOI2001】洛谷2530 化工厂装箱员

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

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

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

  5. shoi2001 化工厂装箱员

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

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

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

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

    毒瘤dp,熬了一上午 有一个显然的事情就是,我们肯定会把手中所有A或所有B或所有C全部装箱,对吧? 然后我们就枚举这一次装箱是将手中所有的3种物品中的一个装箱,然后取min 代码 //By AcerM ...

  8. Java程序员,上班那点事儿--程序员也是一般人

    误区4:程序员不是一般人 本文为清华大学出版社<Java程序员,上班那点事儿>节选. 从一个做会计的女生对程序员的误解说起: 那天和一个做会计的女生聊天,问她对程序员或者编程工作的看法.她 ...

  9. thinkpad触控笔怎么用_电容笔怎么用,如何选择一支电容笔来提升生产力呢?

    电容笔是利用导体材料制作的具有导电特性.用来触控电容式屏幕完成人机对话操作用的笔,用于触控有电容式触摸屏的手机.电脑等电子设备.现今,电容笔已经可以直接在移动设备,如手机,笔记本,平板等,利用APP的 ...

最新文章

  1. php addall,ThinkPHP3.2框架使用addAll()批量插入数据的方法
  2. 云供应商安全评估:小心落入陷阱
  3. 允许Android随着屏幕转动的控制自由转移到任何地方(附demo)
  4. MySQL 常见的sql命令
  5. c语言 系统命令,c语言如何调用系统命令
  6. SAP CRM Fiori my Opportunity Etag handling
  7. ASP.NET Ajax 控件ToggleButton,SliderExtender,ResizableControl 学习笔记
  8. gfi截图_GFI Backup Home Edition是Windows的免费数据备份实用程序
  9. Flutter 一个电话样式小控件
  10. 操作属性之修改样式属性
  11. 让你的U盘变光驱,制作USB-CDROM,用U盘安装系统
  12. react 实现图片正在加载中 加载完成 加载失败三个阶段的
  13. matlab中si是什么意思,Sitsang是什么意思
  14. js return加分号_JS代码中加分号和不加分号的区别
  15. DoubanFm之设计模式(一)
  16. Ubuntu18.04+GTX1060+显卡驱动+CUDA11.2+cuDNN8.1.1
  17. ICT案例——园区网配置
  18. Google Maps Download Tool 谷歌地图下载工具
  19. [QT进阶篇]迅为手把手视频教程嵌入式学习之QT进阶篇
  20. 陈省身:三角形内角和不等于180°

热门文章

  1. 网络服务家族图谱:一张图带您了解华为云网络服务大家族!【华为云分享】
  2. 补习系列(16)-springboot mongodb 数据库应用技巧
  3. mysql设置用户永不过期_在Navicat Premium中管理MySQL用户 - 第2部分:创建新用户
  4. 学习笔记 - Linux学习笔记 第四讲 Linux常用命令
  5. Python基础知识学习笔记——Matplotlib绘图
  6. hibernate 调用oracle存储过程,hibernate调用oracle存储过程||函数
  7. 使用CLion构建Qt项目
  8. java sendto,Android:套接字-java.net.SocketException:sendto失败:EPIPE(管道断开)
  9. vue滚动条禁止_vue弹窗后如何禁止滚动条滚动?
  10. VS Code解决Go相关工具无法安装问题