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需要的最少的装箱次数。


大力DP

\(dp[i][j][k][l]\)表示现在改选第\(i\)个时,手上有\(j\)个\(A\),\(k\)个\(B\),\(l\)个\(C\)的最小方案

写的记忆化搜索


Code:

#include <cstdio>
int min(int x,int y){return x<y?x:y;}
int dp[103][12][12][12],c[102],n;
int dfs(int dep,int rest1,int rest2,int rest3)
{
if(dp[dep][rest1][rest2][rest3]) return dp[dep][rest1][rest2][rest3];
dp[dep][rest1][rest2][rest3]=0x3f3f3f3f;
if(dep==n+1)
return dp[dep][rest1][rest2][rest3]=(rest1!=0)+(rest2!=0)+(rest3!=0);
int r[4];
if(rest1)
{
r[1]=0,r[2]=rest2,r[3]=rest3;
for(int i=dep;i<=min(dep+rest1-1,n);i++)
r[c[i]]++;
dp[dep][rest1][rest2][rest3]=min(dp[dep][rest1][rest2][rest3],dfs(min(dep+rest1-1,n)+1,r[1],r[2],r[3])+1);
}
if(rest2)
{
r[1]=rest1,r[2]=0,r[3]=rest3;
for(int i=dep;i<=min(dep+rest2-1,n);i++)
r[c[i]]++;
dp[dep][rest1][rest2][rest3]=min(dp[dep][rest1][rest2][rest3],dfs(min(dep+rest2-1,n)+1,r[1],r[2],r[3])+1);
}
if(rest3)
{
r[1]=rest1,r[2]=rest2,r[3]=0;
for(int i=dep;i<=min(dep+rest3-1,n);i++)
r[c[i]]++;
dp[dep][rest1][rest2][rest3]=min(dp[dep][rest1][rest2][rest3],dfs(min(dep+rest3-1,n)+1,r[1],r[2],r[3])+1);
}
return dp[dep][rest1][rest2][rest3];
}
int main()
{
char s[3];
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",s);
c[i]=s[0]-'A'+1;
}
int r[4]={0,0,0,0};
for(int i=1;i<=min(n,10);i++)
r[c[i]]++;
printf("%d\n",dfs(min(n,10)+1,r[1],r[2],r[3]));
return 0;
}

2018.7.13

洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告的更多相关文章

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

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

  2. 洛谷 p2530 化工场装箱员(资源型)

    化工场装箱员 https://www.luogu.org/problem/show?pid=2530 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的 ...

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

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

  4. 洛谷 P2527 [SHOI2001]Panda的烦恼 解题报告

    P2527 [SHOI2001]Panda的烦恼 题目描述 panda是个数学怪人,他非常喜欢研究跟别人相反的事情.最近他正在研究筛法,众所周知,对一个范围内的整数,经过筛法处理以后,剩下的全部都是质 ...

  5. 洛谷 P2529 [SHOI2001]击鼓传花 解题报告

    P2529 [SHOI2001]击鼓传花 题意:求出\(n!\)末尾最后一位非0数字 数据范围:\(n<=10^{100}\) 我们从简单的开始考虑 1.显然,\(n!\)可以被这么表示 \(n ...

  6. 【题解】SHOI2001化工厂装箱员

    ————传送:洛谷P2530 这道题目还是挺简单的,状态也容易想到. 数据范围非常的小,所以即便是很多维度,复杂度也完全可以接受.定义状态:dp[i][a][b][c]为手上的货物拿到第i个时三种物品 ...

  7. [SHOI2001]化工厂装箱员

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

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

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

  9. 洛谷 P2323 [HNOI2006]公路修建问题 解题报告

    P2323 [HNOI2006]公路修建问题 题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 思路: 二分答案 然后把每条能加的大边都加上,然后加小边 但在洛谷的题 ...

随机推荐

  1. 宿主机 PL/SQL Developer 连接虚拟机 ORACLE 数据库

    1.确保主机与虚拟机间通信正常,双方关闭window防火墙.如能 ping 通,请确保两机IP在一个网段 2.主机安装orcl客户端 3.虚拟机 D:\app\lin\product\11.2.0\d ...

  2. Docker--从安装到搭建环境

    docker 1. ubuntu下安装docker 安装docker有两种方法: 一种是用官方的bash脚本一键安装. 直接一条命令就解决了: $ curl -sSL https://get.dock ...

  3. Selenium2+python自动化-iframe

    前言 本篇详细讲解iframe的相关切换操作. 一.frame和iframe区别 Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性. frame是整个页 ...

  4. 怎样安装Scrapy

    Windows怎样安装Scrapy? pip install scrapy会报错 访问https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载并放到 ...

  5. Python教程 深入条件控制

    while 和 if 条件句中可以使用任意操作,而不仅仅是比较操作. 比较操作符 in 和 not in 校验一个值是否在(或不在)一个序列里.操作符 is 和 is not 比较两个对象是不是同一个 ...

  6. spring-boot断点调试(IDEA)

  7. JavaScript学习笔记(二)——函数和数组

    第二章 函数简介 1 第一个函数示例 <script language="JavaScript" type="text/JavaScript"> f ...

  8. Maven私有仓库搭建以及使用

    一.使用Docker安装Nexus Docker search nexus docker pull docker.io/sonatype/nexus3 mkdir -p /usr/local/nexu ...

  9. 构建树形结构数据(全部构建,查找构建)C#版

    摘要: 最近在做任务管理,任务可以无限派生子任务且没有数量限制,前端采用Easyui的Treegrid树形展示控件. 一.遇到的问题 获取全部任务拼接树形速度过慢(数据量大约在900条左右)且查询速度 ...

  10. node stream流

    stream 模块可以通过以下方式使用: const stream = require('stream');   Node.js 中有四种基本的流类型: Writable - 可写入数据的流(例如 f ...