————传送:洛谷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化工厂装箱员的更多相关文章

  1. 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告

    P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B ...

  2. [SHOI2001]化工厂装箱员

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

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

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

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

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

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

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

  6. SHOI2001化工厂装箱员——记忆化搜索

    题目:https://www.luogu.org/problemnew/show/P2530 太弱了不会用DP,于是暴搜: 每次传进一个数组c记录当前状态各种物品有多少个,枚举取哪种物品,返回最小值, ...

  7. 化工厂装箱员(洛谷 P2530)

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

  8. 化工厂装箱员 洛谷 p2530

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

  9. Luogu 2530 化工厂装箱员

    Written with StackEdit. Description \(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\ ...

随机推荐

  1. ASP.NET成员资格和角色管理

    一.成员资格管理 1.成员资格管理模型 ASP.NET提供的成员资格管理功能,其核心是利用内置的成员库表(SQL Server).成员资格管理API(Membership.MembershipUser ...

  2. 上传文件到阿里云linux服务器

    在“运行”中输入cmd,打开控制台,切换到刚才Putty的安装目录下,我的是E:\Putty,然后输入pscp命令,我们需要这个命令来实现文件的上传.如下图所示,命令格式为: pscp D:\recy ...

  3. 使用Win32DiskImager后重置SD卡

    再1.Windows diskpart命令 diskpart 2.列出所有的磁盘 lisk disk 3.选择U盘所在的磁盘 4.清除磁盘 clean 5.创建主分区 create primary p ...

  4. PHP如何实现99乘法表?

    看到这个问题,可能大家更多的是考虑到用for循环,个人觉得使用for循环太影响程序性能.推荐使用递归处理.  /** * Title : 递归实现99乘法表 * Author : Bruceqi * ...

  5. 更新Composer依赖报错处理Fatal error: Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRe

    更新Composer依赖报错处理 Fatal error: Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRe po ...

  6. Laravel-admin 当使用Form组件hasMany的时候 进行编辑出现错误 foreach错误的时候解决方案

    我的关联关系原名是 goodImage 修改成 image 之后解决问题 分析得出应该是  laravel会将goodImage 转成 good_image字段  这样就foreach会报错  所以出 ...

  7. aioysql(异步操作MySQL)-python

    python异步IO初探 探索异步IO执之前,先说说IO的种类 阻塞IO最简单,即读写数据时,需要等待操作完成,才能继续执行.进阶的做法就是用多线程来处理需要IO的部分,缺点是开销会有些大. 非阻塞I ...

  8. POJ2762 单向连通图(缩点+拓扑排序

    Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19552 ...

  9. Python3 time模块&datetime模块&random模块

    ''' time模块 ''' # import time # print(help(time)) # help()提供帮助 # print(time.time()) # 1970年开始到现在的秒数(时 ...

  10. [Cracking the Coding Interview] 4.2 Minimal Tree 最小树

    Given a sorted(increasing order) array with unique integer elements, write an algorithm to create a ...