Vijos 1323: 化工厂装箱员
题形:DP
题意:A,B,C三种物品,一共N个,顺序摆放,按顺序拿。每次手上最多能拿10个物品,然后可以将某个类别的物品分类放好,再从剩下的拿,补全10个。问最少放几次,可以把所有物品分类好。
思路:
第一次见这种DP.……感觉应该是宽搜求最短路吧?好奇怪
dp[i][a][b][c] 表示 拿到第i个物品,手上剩A物品a个,B物品b个,C物品c个,这个状态时,所用的最少的次数。
假设我们这次拿A,则
dp[i+a] [sum['A'][i+a]-sum['A'][i]] [b+sum['B'][i+a] - sum['B'][i]] [c+sum['C'][i+a] - sum['C'][i]] = min(本身,dp[i][a][b][c] + 1)
反正挺容易理解的,拿掉多少个a,补多少个,然后重新计算现在手上有的a,b,c。
然后暴力递推啊递推。。结果就过了。
哦对了,答案在所有 a,b,c都为0的状态里。取最小的一个。(所以不能只推到n结束,要多推10个)
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 120 int sum[][N];
int dp[N][][][]; int main() {
int n;
while (scanf("%d", &n) != EOF) {
for (int i = ; i < ; i++) sum[i][] = ;
for (int i = ; i <= n; i++) {
char str[];
scanf("%s", str);
for (int j = ; j < ; j++) {
sum[j][i] = sum[j][i-];
}
sum[str[]-'A'][i]++;
}
if (n <= ) {
int cnt = ;
for (int j = ; j < ; j++) {
if (sum[j][n]) cnt++;
}
printf("%d\n", cnt);
continue;
} for (int i = n+; i <= n+; i++) {
for (int j = ; j < ; j++) {
sum[j][i] = sum[j][i-];
}
} memset(dp, 0x3f, sizeof(dp)); dp[][sum[][]][sum[][]][sum[][]] = ; int ans = ;
for (int i = ; i <= n+; i++) {
for (int a = ; a <= ; a++) {
for (int b = ; b <= -a; b++) {
for (int c = ; c <= -a-b; c++) {
if (dp[i][a][b][c] >= 0x3f3f3f3f) continue;
if (a==&&b==&&c==) {
if (ans > dp[i][a][b][c]) ans = dp[i][a][b][c];
}
int &dpNoA = dp[i+a][sum[][i+a]-sum[][i]][b + sum[][i+a]-sum[][i]][c + sum[][i+a] - sum[][i]];
int &dpNoB = dp[i+b][a + sum[][i+b]-sum[][i]][sum[][i+b]-sum[][i]][c + sum[][i+b] - sum[][i]];
int &dpNoC = dp[i+c][a + sum[][i+c]-sum[][i]][b + sum[][i+c]-sum[][i]][sum[][i+c] - sum[][i]];
dpNoA = min(dpNoA, dp[i][a][b][c]+);
dpNoB = min(dpNoB, dp[i][a][b][c]+);
dpNoC = min(dpNoC, dp[i][a][b][c]+);
}
}
}
}
printf("%d\n", ans);
}
return ;
}
Vijos 1323: 化工厂装箱员的更多相关文章
- 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告
P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B ...
- 化工厂装箱员(洛谷 P2530)
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- 化工厂装箱员 洛谷 p2530
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- [SHOI2001]化工厂装箱员(dp?暴力:暴力)
118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度 ...
- Luogu 2530 化工厂装箱员
Written with StackEdit. Description \(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\ ...
- 洛谷P2530 [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...
- [ SHOI 2001 ] 化工厂装箱员
\(\\\) \(Description\) 传送带上按顺序传过来\(N\)个物品,一个有\(A,B,C\)三类. 每次装箱员手里只能至多拿十个,然后将手中三类物品中的一类装箱,才能接着拿或接着装箱, ...
- 解题:SHOI2001 化工厂装箱员
题面 题外话:从零开始的DP学习系列之壹(我真的不是在装弱,我DP真的就这么烂TAT) 从lyd那里学到了一点DP的小技巧,在设状态时可以先假装自己在做搜索,往一个函数里传了一些参数,然后把这些参数抓 ...
随机推荐
- python生成四位随机数
有些时候需要发送短信给用户生成四位随机数字,这里在python中我们可以根据python自带的标准库random和string来实现. random下有三个可以随机取数的函数,分别是choice,ch ...
- 基于axios的vue插件,让http请求更简单
ajax-plus 基于axios 的 Vue 插件 如何使用 npm 模块引入 首先通过 npm 安装 ```npm install --save ajax-plus or yarn add aja ...
- 汇编语言 Part 1——简介、基本语法、内存分段与内存地址
简介 什么是汇编语言? 汇编语言是一种低级的编程语言,在程序的语句和体系结构的机器代码指令之间有很强的对应关系. 每种汇编语言都特定于特定的计算机体系结构,但需要解释或编译.汇编语言也可以称为符号机器 ...
- http请求原理
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line).请求头部(header).空行和请求数据四个部分组成,下图给出了请求报文的一般格式. 请求行 HTTP响应 ...
- LightOj:1422-Halloween Costumes
传送门:http://www.lightoj.com/volume_showproblem.php?problem=1422 Halloween Costumes problem descriptio ...
- golang json 示例
jsonStr, err := client.Get( deviceIdKey ).Result() if err == redis.Nil { deviceIds = []string{device ...
- <node>……express的中间件……//
Express是一个基于Node.js平台的web应用开发框架,在Node.js基础之上扩展了web应用开发所需要的基础功能,从而使得我们开发Web应用更加方便.更加快捷. 中间件是什么? 中间件函数 ...
- CSS预处理器(less 和 sass)
CSS预处理器 1.基于CSS的另一种语言 2.通过工具编译成CSS 3.添加了很多CSS不具备的特性 4.能提升CSS文件的组织 提供功能:1.嵌套 反映层级和约束 2.变量和计算,减少重复戴拿 3 ...
- CodeForces 568B DP Symmetric and Transitive
题意: 根据离散数学的内容知道,一个二元关系是一个二元有序组<x, y>的集合. 然后有一些特殊的二元关系,比如等价关系,满足三个条件: 自反性,任意的x,都有二元关系<x, x&g ...
- Linux下配置LAMP环境
先准备相关软件,并确保服务器已经安装了gcc,gcc-c++,make三个软件,以便后续编译过程. 首先安装, libxml2 ftp://xmlsoft.org/libxml2/ 下载最新版本(我的 ...