题形: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: 化工厂装箱员的更多相关文章

  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. [ SHOI 2001 ] 化工厂装箱员

    \(\\\) \(Description\) 传送带上按顺序传过来\(N\)个物品,一个有\(A,B,C\)三类. 每次装箱员手里只能至多拿十个,然后将手中三类物品中的一类装箱,才能接着拿或接着装箱, ...

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

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

随机推荐

  1. 重温经典之赫夫曼(Huffman)编码

    先看看赫夫曼树假设有n个权值{w1,w2,…,wn},构造一个有n个叶子结点的二叉树,每个叶子结点权值为wi,则其中带权路径长度WPL最小的二叉树称作赫夫曼树或最优二叉树. 赫夫曼树的构造,赫夫曼最早 ...

  2. html5新结构标签

    html5新结构标签 <header>  定义 section 或 page 的页眉,也就是定义头部的标签. <footer> 定义 section 或 page 的页脚. & ...

  3. Golang 简单web测试

    // mhoso project main.go package main import ( "log" "net/http" "./controll ...

  4. C++输入密码不显示明文

    之前有遇到需求说输入密码不显示明文,但同时会有一些其他问题,暂时没做,如今经过尝试可以实现,但是得先知道要输入的是密码.主要利用的getch()函数的不回显特点.需要注意的是这个函数不是标准函数,而且 ...

  5. 如何使用jmeter做关联

    1.适用场景 从上一个接口的返回值中获取值传递给下一个接口使用 2.添加JSON Extractor 在需求提取的参数上添加--后置处理器--JSON Extractor 从登录接口的返回值中取use ...

  6. 面试题--如何防止sql注入,使用PreparedStatement的预编译,传入的内容就不会和原来的语句发生任何匹配的关系,达到防止注入的方法

    PreparedStatement的用法 jdbc(java database connectivity,java数据库连接)的api中的主要的四个类之一的java.sql.statement要求开发 ...

  7. 动态规划:Codeforces Round #427 (Div. 2) C Star sky

    C. Star sky time limit per test2 seconds memory limit per test256 megabytes inputstandard input outp ...

  8. CDH4 journalnode方式手工安装手册之三

    一.                                启动JournalNode 每台机器都要执行: mkdir -p /smp/hadoop-cdh4/bch/ chmod -R 77 ...

  9. CSS 预处理器框架

    CSS 预处理器框架 可以按照需求来使用别人的代码 1.sass (compass) 2.less (lesshat/EST) 3.提供现成的 mixin 4.类似 JS 类库 ,封装常用功能 css ...

  10. Python选修课第二届Turtle绘图大赛~~画猫猫

    (a)20161401167 夏思敏 20161401179 段梦格 (b)代码执行视频链接 点击查看:Python使用turtle库画猫猫 (c)程序源码 import turtle turtle. ...