【题解】SHOI2001化工厂装箱员
————传送:洛谷P2530
这道题目还是挺简单的,状态也容易想到。
数据范围非常的小,所以即便是很多维度,复杂度也完全可以接受。定义状态:dp[i][a][b][c]为手上的货物拿到第i个时三种物品分别有a, b, c个所用的最少次数。
状态转移就暴力枚举是放下a,b,c中的哪一个。
只不过需要特判一下n<10的情况。//再一次对自己丑陋的代码有点接受无能……
#include <bits/stdc++.h>
using namespace std;
#define maxn 102
#define INF 999999
int n, ans = INF, suma[maxn], sumb[maxn], sumc[maxn], dp[maxn][][][];
char c[maxn]; int min(int a, int b)
{
if(b == -) return a;
if(a == -) return b;
return a < b ? a : b;
} int trans(int x, int y, int aa, int bb, int cc)
{
int a = suma[y] - suma[x], b = sumb[y] - sumb[x], c = sumc[y] - sumc[x];
int sum = a + b + c + aa + bb + cc;
bool done = false;
if(sum - aa <= ) done = true, dp[y][a][b + bb][c + cc] = min(dp[x][aa][bb][cc] + , dp[y][a][b + bb][c + cc]);
if(sum - bb <= ) done = true, dp[y][a + aa][b][c + cc] = min(dp[x][aa][bb][cc] + , dp[y][a + aa][b][c + cc]);
if(sum - cc <= ) done = true, dp[y][a + aa][b + bb][c] = min(dp[x][aa][bb][cc] + , dp[y][a + aa][b + bb][c]);
if(!done) return -;
else return ;
} int main()
{
scanf("%d\n", &n);
memset(dp, -, sizeof(dp));
for(int i = ; i <= n; i ++)
{
cin >> c[i];
suma[i] = suma[i - ];
sumb[i] = sumb[i - ];
sumc[i] = sumc[i - ];
if(c[i] == 'A') suma[i] ++;
else if(c[i] == 'B') sumb[i] ++;
else sumc[i] ++;
}
if(n < )//特判
{
ans = ;
if(suma[n]) ans ++;
if(sumb[n]) ans ++;
if(sumc[n]) ans ++;
printf("%d\n", ans);
return ;
}
dp[][suma[]][sumb[]][sumc[]] = ;
for(int i = ; i <= n; i ++)
{
for(int aa = ; aa <= ; aa ++)
for(int bb = ; bb <= ; bb ++)
for(int cc = ; cc <= ; cc ++)
{
if(dp[i][aa][bb][cc] == -) continue;
for(int j = i + ; j <= n; j ++)
if(trans(i, j, aa, bb, cc) == -) break;
}
}
for(int aa = ; aa <= ; aa ++)
for(int bb = ; bb <= ; bb ++)
for(int cc = ; cc <= ; cc ++)
{
if(dp[n][aa][bb][cc] == -) continue;
int tem = ;
if(aa) tem ++;
if(bb) tem ++;
if(cc) tem ++;
ans = min(ans, dp[n][aa][bb][cc] + tem);
}
printf("%d\n", ans);
return ;
}
【题解】SHOI2001化工厂装箱员的更多相关文章
- 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告
P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B ...
- [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- 洛谷P2530 [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...
- [SHOI2001]化工厂装箱员(dp?暴力:暴力)
118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度 ...
- 解题:SHOI2001 化工厂装箱员
题面 题外话:从零开始的DP学习系列之壹(我真的不是在装弱,我DP真的就这么烂TAT) 从lyd那里学到了一点DP的小技巧,在设状态时可以先假装自己在做搜索,往一个函数里传了一些参数,然后把这些参数抓 ...
- SHOI2001化工厂装箱员——记忆化搜索
题目:https://www.luogu.org/problemnew/show/P2530 太弱了不会用DP,于是暴搜: 每次传进一个数组c记录当前状态各种物品有多少个,枚举取哪种物品,返回最小值, ...
- 化工厂装箱员(洛谷 P2530)
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- 化工厂装箱员 洛谷 p2530
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- Luogu 2530 化工厂装箱员
Written with StackEdit. Description \(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\ ...
随机推荐
- intellij IEDA 从svn拉环境到正常运行
intellij IEDA 从svn拉环境到正常运行 1.svn拉项目 在项目选择界面点击Check out from Version Control 从中选择Subversion(SVN) 2.选 ...
- 软件的按契约设计(DbC---Design by Contract)
一.DbC基本概念 DbC的思想源于商业活动中商家和用户的行为(义务和利益关系),双方都要遵守一个契约(合同),交易才能完成. 商家与用户的契约关系如下: 1. 商家必须提供某种产品(义务),并有权获 ...
- Python的scrapy之爬取boss直聘网站
在我们的项目中,单单分析一个51job网站的工作职位可能爬取结果不太理想,所以我又爬取了boss直聘网的工作,不过boss直聘的网站一次只能展示300个职位,所以我们一次也只能爬取300个职位. jo ...
- python2.7入门---字典(Dictionary)
这次咱们记录的是python中的字典这个鬼,首先我们得了解,字典是另一种可变容器模型,且可存储任意类型对象.字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 ...
- 谷歌面试官经典作品(CTCI)目录
1.1 判断一个字符串中的字符是否唯一 1.2 字符串翻转 1.3 去除字符串中重复字符 1.8 利用已知函数判断字符串是否为另一字符串的子串 2.1 从链表中移除重复结点 2.2 实现一个算法从一个 ...
- Andrid 打印调用堆栈
public static void printCallStatck() { Throwable ex = new Throwable(); StackTraceElement[] stackElem ...
- asp.net mvc 无刷新加载
1.视图(index) <!--start--> <div data-am-widget="list_news" class="am-list-news ...
- 在测试时用到的一些mysql的小技巧(持续更新)
经常使用的快捷键: 1.ctrl+q 打开查询窗口 2.ctrl+/ 注释sql语句 3.ctrl+shift +/ 解除注释 4.ctrl+r 运行查询窗口的sql语句 5.ctrl+shift+r ...
- 06-Mysql数据库----表的操作
06-表的操作 本节掌握 存储引擎介绍(了解) 表的增删改查 一.存储引擎(了解) 前几节我们知道mysql中建立的库===>文件夹,库中的表====>文件 现实生活中我们用来存储数据 ...
- php+Mysql 页面登录代码
登录界面设置: <?php/** * Created by xx. * User: msi * Date: 2017/10/26 * Time: 18:12 *///session每次用之前都要 ...