洛谷P1136 迎接仪式 DP

来源:互联网 发布:c语言汉诺塔回溯算法 编辑:程序博客网 时间:2024/04/28 12:14

题目描述

LHX教主要来X市指导OI学习工作了。为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字。一旁的Orzer依次摆出“欢迎欢迎欢迎欢迎……”的大字,但是领队突然发现,另一旁穿着“教”和“主”字文化衫的Orzer却不太和谐。

为了简单描述这个不和谐的队列,我们用“j”替代“教”,“z”替代“主”。而一个“j”与“z”组成的序列则可以描述当前的队列。为了让教主看得尽量舒服,你必须调整队列,使得“jz”子串尽量多。每次调整你可以交换任意位置上的两个人,也就是序列中任意位置上的两个字母。而因为教主马上就来了,时间仅够最多作K次调整(当然可以调整不满K次),所以这个问题交给了你。

题解:

真是一道好题啊!显然,每个位置最多被交换一次,交换的一定是不同的字母。对于一次交换,我们可以看做把一个字母变成另外一个字母,那么我们考虑DP:f[i][j][k]表示前i位,把j个j变成z,把k个z变成j的最多jz子串数。那么转移很简单,统计答案时也只需要统计j、k相同的情况就可以了。
代码这里就不贴了。