【题解】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\ ...
随机推荐
- 第一个python代码
# -*- coding:utf-8 -*- user = raw_input("请输入用户名") passwd = raw_input("请输入密码") if ...
- 某CTF代码审计题
记一次参加CTF比赛翻车记! 开始还是挺有信心的,毕竟也是经常打一些CTF锻炼,然而比赛发现大佬们平时不显山不漏水的一比赛全出来了!赛后看了一下各题的writeup发现自己的确技不如人啊!借鉴一个 ...
- Leecode刷题之旅-C语言/python-136只出现一次的数字
/* * @lc app=leetcode.cn id=136 lang=c * * [136] 只出现一次的数字 * * https://leetcode-cn.com/problems/singl ...
- powerpoint教程资料,PPT的
Powerpoint,是微软公司设计的演示文稿软件,利用Powerpoint不仅可以创建演示文稿,还可以在互联网上召开面对面会议.远程会议或在网上给观众展示演示文稿,掌握利用PowerPoint是一项 ...
- 多线程编程之Apue3rd_Chapter11之互斥锁_读写锁_自旋锁
学习了apue3rd的第11章,主要讲的是多线程编程.因为线程共享进程的资源比如堆和全局变量,多线程编程最重要的是,使用各种锁进行线程同步. 线程编程首先要学习的三个函数如下: #include &l ...
- iScroll实现下拉刷新上拉加载
前言 初学iscroll这个控件,给我的一个感觉还是蛮不错的. 什么是iScroll:是目前最成熟的自定义滚动解决方案之一,在移动端和PC有很好的兼容性.iScroll官方提供了5个不同的版本 isc ...
- Python3爬虫(十二) 爬虫性能
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.简单的循环串行一个一个循环,耗时是最长的,是所有的时间综合 import requests url_list ...
- 接口和lambda表达式笔记
接口 接口是双方,即服务提供方和想让它们的对象对服务是可用的那些类,之间约定的一种机制. 声明一个接口 public interface IntSequence{ //不提供实现,则该方法为抽象方法, ...
- Spring + MySQL + Mybatis + Redis【二级缓存】执行流程分析
一级缓存基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就 ...
- 程序员编程利器:20款最好的免费的IDEs和编辑器
程序员编程利器:20款最好的免费的IDEs和编辑器 还没转眼明年可就大年三十了,忙的可真是晕头转了个向,看着亲朋好友们那让人欣羡的小肚腩,不禁感慨,岁月是一把猪饲料,绿了芭蕉,肥了那杨柳小蛮腰,可怜我 ...