显然,这是一道动归题。
我们发现,每次交换时只可能交换不同的字母(交换同类字母显然是没有意义的)。那么每次交换等同于将 111 个 "j""j""j" 变为 "z""z""z",一个 zzz 变为 "j""j""j"。
定义状态 dp[i][a][b]dp[i][a][b]dp[i][a][b],即考虑到第 iii 个字符,将 aaa 个 jjj 进行变换,bbb 个 "z""z""z" 进行变换的最大价值。
对于相邻的字母,只有4种可能,也只有4种转移方程,分别为:

  1. jjjjjj: dp[i][a][b]=dp[i−2][a−1][b]+1dp[i][a][b]=dp[i-2][a-1][b]+1dp[i][a][b]=dp[i−2][a−1][b]+1
  2. jzjzjz:dp[i][a][b]=dp[i−2][a][b]+1dp[i][a][b]=dp[i-2][a][b]+1dp[i][a][b]=dp[i−2][a][b]+1
  3. zjzjzj:dp[i][a][b]=dp[i−2][a−1][b−1]+1dp[i][a][b]=dp[i-2][a-1][b-1]+1dp[i][a][b]=dp[i−2][a−1][b−1]+1
  4. zzzzzz:dp[i][a][b]=dp[i−2][a][b−1]+1dp[i][a][b]=dp[i-2][a][b-1]+1dp[i][a][b]=dp[i−2][a][b−1]+1

Code:

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=600;
int d[maxn][120][120];
char A[maxn];
int main()
{
int N,K,ans=0;
scanf("%d%d",&N,&K);
scanf("%s",A+1);
memset(d,-0x3f,sizeof(d));
d[0][0][0]=0;
d[1][0][0]=0;
if(A[1]=='z')d[1][0][1]=0;
else d[1][1][0]=0;
for(int n=2;n<=N;++n)
for(int j=0;j<=K;++j)
for(int z=0;z<=K;++z)
{
d[n][j][z]=d[n-1][j][z];
if(A[n-1]=='j'&&A[n]=='j'&&j>=1)d[n][j][z]=max(d[n][j][z],d[n-2][j-1][z]+1);
if(A[n-1]=='j'&&A[n]=='z')d[n][j][z]=max(d[n][j][z],d[n-2][j][z]+1);
if(A[n-1]=='z'&&A[n]=='z'&&z>=1)d[n][j][z]=max(d[n][j][z],d[n-2][j][z-1]+1);
if(A[n-1]=='z'&&A[n]=='j'&&z>=1&&j>=1)d[n][j][z]=max(d[n][j][z],d[n-2][j-1][z-1]+1);
if(j==z)ans=max(ans,d[n][j][z]);
}
printf("%d",ans);
return 0;
}

  

洛谷P1136 迎接仪式 动态规划的更多相关文章

  1. 洛谷 P1136 迎接仪式 解题报告

    P1136 迎接仪式 题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出&q ...

  2. 洛谷P1136 迎接仪式

    题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出“欢迎欢迎欢迎欢迎……”的 ...

  3. P1136 迎接仪式 (动态规划)

    题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出“欢迎欢迎欢迎欢迎……”的 ...

  4. P1136 迎接仪式

    P1136 迎接仪式 $O(n^{2}k)$:$f[i][k]$表示到第$i$个字符为止,交换$k$次,得到的最多子串数 那么枚举位置$j$,状态可以从$f[j][k-1]+1$转移过来 $O(nk^ ...

  5. luogu P1136 迎接仪式

    luogu P1136 迎接仪式 本题的难点是状态设计, n^2*m 的状态设计转移太过垄杂,emmmm反正我写不出来QAQ 参考了题解 /*相同字符不用调换,一个字符最多被调换一次否则会有等价多方案 ...

  6. 洛谷P1280 && caioj 1085 动态规划入门(非常规DP9:尼克的任务)

    这道题我一直按照往常的思路想 f[i]为前i个任务的最大空暇时间 然后想不出来怎么做-- 后来看了题解 发现这里设的状态是时间,不是任务 自己思维还是太局限了,题做得太少. 很多网上题解都反着做,那么 ...

  7. P1136 迎接仪式 题解

    题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出"欢迎欢迎欢迎欢 ...

  8. 洛谷 P1464 Function【动态规划(递推)/记忆化搜索(递归)】

    题目描述 对于一个递归函数w(a,b,c) 如果a<=0 or b<=0 or c<=0就返回值1. 如果a>20 or b>20 or c>20就返回w(20,2 ...

  9. 洛谷P2196 && caioj 1415 动态规划6:挖地雷

    没看出来动规怎么做,看到n <= 20,直接一波暴搜,过了. #include<cstdio> #include<cstring> #include<algorit ...

随机推荐

  1. 转载:【学习之家】Python中__init__.py文件的作用

    Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...

  2. UNP学习笔记3——基本UDP套接字编程

    1 概述 TCP和UDP网络编程存在一些本质的差异,主要是由于传输层的差别:UDP是无连接的不可靠的数据报协议,而TCP是面向连接的字节流协议. 下图是典型的UDP客户端和服务器之间的通信流程.客户不 ...

  3. Thingworx 使用REST API获取JSON数据

    版本:7.4.1 1.URL规则 http://localhost/Thingworx/Things/[Things名称]/Services/[Service名称]?method=POST&A ...

  4. Git diff 代码比较的高级技巧

    Git diff 代码比较的高级技巧 作者:offbye 出处:http://blog.csdn.net/offbye/article/details/6592563 Git是使用branch来管理不 ...

  5. rest-framework框架

    rest-framework框架是Django里面非常重要的框架,但提到rest-framework框架就不得不说两种请求方式,那就是CBV和FBV. FBV(function base views) ...

  6. BZOJ 2049 [SDOI2008]洞穴勘测 (LCT)

    题目大意:维护一个森林,支持边的断,连,以及查询连通性 LCT裸题 洛谷P2147传送门 1A了,给自己鼓鼓掌 #include <cstdio> #include <algorit ...

  7. python_字符串常用操作

    name = "monicao"name.capitalize() #首字母大写print(name.capitalize()) print(name.count("o& ...

  8. pytorch 7 optimizer 优化器 加速训练

    import torch import torch.utils.data as Data import torch.nn.functional as F import matplotlib.pyplo ...

  9. AJAX 创建对象 请求 响应 readyState

    AJAX 创建对象 请求 响应 readyState AjAX = Asynchronous JavaScript and XML (异步的JavaScrip和 XML). 不是新的编程语言, 而是一 ...

  10. NYIST 749 蚂蚁的难题(八)

    蚂蚁的难题(八)时间限制:2000 ms | 内存限制:65535 KB难度:5 描述蚂蚁是一个古玩爱好者,他收藏了很多瓶瓶罐罐. 有一天,他要将他的宝贝们一字排开, 摆放到一个长度为L的展台上. 已 ...