显然,这是一道动归题。
我们发现,每次交换时只可能交换不同的字母(交换同类字母显然是没有意义的)。那么每次交换等同于将 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. day08 数字,字符串类型内置方法

    目录 数字类型内置方法 为什么要有数据类型? 定义方式 方法 储存一个值or多个值? 有序or无序?(有序:有索引, 无序:无索引) 可变or不可变(可变:值变id不变,不可变:值变id也变) 字符串 ...

  2. (2)RDD的基本操作

    一.map操作,map(Transform) 二.collect操作,collect(Action) 三.使用PairRDD来做计算,类似key-value结构 采用groupByKey来.将资料按照 ...

  3. 树莓派(Raspberry Pi):完美的家用服务器

    出处:http://linux.cn/thread/11884/1/1/ 树莓派(Raspberry Pi):完美的家用服务器 自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和 ...

  4. git pull 跟 fetch的区别

    今天在公司碰到个问题,公司不使用master分支作为主分支,而使用release分支作为主分支,这就碰到了个问题,也就是当clone一个项目下来的时候,如果master跟release分支有冲突,就不 ...

  5. Java并发和多线程4:使用通用同步工具CountDownLatch实现线程等待

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 countDown ...

  6. 【codeforces 234F】Fence

    [题目链接]:http://codeforces.com/problemset/problem/234/F [题意] 你有n块板要凃油漆; 然后每块板有高度h[i];(宽度都为1) 然后每块板只能凃同 ...

  7. [AngularJS]Chapter 4 AngularJS程序案例分析

    前边讲的都是基础.本章看看他们怎么合作的. 我们要建一个程序.一次一步.章末结束 [这个程序] GutHub是一个简单的菜谱管理程序.功能是存好吃的的菜谱并提供步骤.这个程序包含: 两列布局 左边是导 ...

  8. java文件对照工具

    今天想比較一下两个java文件.这两个文件是本地的. 就在网上下载了一个对照工具(破解版)认为挺好用的对于不同的地方有高亮显示. 就给大家分享一下.软件名叫:beyond compare 软件下载地址 ...

  9. python抓取新浪微博评论并分析

    1,实现效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2xhbnphbw==/font/5a6L5L2T/fontsize/400/fill ...

  10. js mudules.js

    var InsertRow={ isMoveRow:false, // 是否存在动态移动行 curSelRowIndex:"", // 当前选中行序号 prevSelRowInde ...