首页 > 其他分享 >[题解][洛谷P1136] 迎接仪式

[题解][洛谷P1136] 迎接仪式

时间:2024-04-17 22:22:59浏览次数:29  
标签:洛谷 int 题解 507 P1136 107

题目描述

对于一个由字母“j”和“z”组成的字符串,可以任意交换两个字符的位置不超过k次,求最多能出现多少个“jz”字串。

题解

动态规划题。
设f[i][j][k][0/1]表示到第i位,前面交换了j个“j”,交换了k个“z”,且第i位是j(用0表示)或z(用1表示)。
当j=k时即为可行解。
为什么需要用第四维统计:因为上一位的末尾是0或1会对下一位产生影响。上一位既有被更改的可能,也有没有更改的可能,需分别计算。

代码

#include<bits/stdc++.h>
using namespace std;
int f[507][107][107][2];
int a[507];
int main(){
	memset(f,-1,sizeof f);
	int n,k;
	cin>>n>>k;
	string s;
    cin>>s;
	for(int i=1;i<=n;i++)a[i]= s[i-1]=='z';
	f[0][0][0][1]=0;
	for(int i=1;i<=n;i++)
		for(int p=0;p<=k;p++)
			for(int q=0;q<=k;q++){
				f[i][p][q][a[i]]=max(f[i-1][p][q][0]+a[i],f[i-1][p][q][1]);
				if(a[i]&&p)f[i][p][q][0]=max(f[i-1][p-1][q][1],f[i-1][p-1][q][0]);
				else if(!a[i]&&q)f[i][p][q][1]=max(f[i-1][p][q-1][0]+1,f[i-1][p][q-1][1]);
			}		
	int ans=0;
	for(int i=0;i<=k;i++)ans=max(ans,max(f[n][i][i][0],f[n][i][i][1]));
	cout<<ans<<endl;
}

标签:洛谷,int,题解,507,P1136,107
From: https://www.cnblogs.com/zwzww/p/18141923

相关文章

  • [题解][洛谷P1108] 低价购买
    题目描述求最长下降子序列长度,以及最长下降子序列的个数。(构成的序列一样的时候,视为同一种最长下降子序列)题解n不超过5000,n^2复杂度即可解决该问题。主要在于如何统计最长下降子序列个数。可以设数组t[i]表示以i为结尾的最长下降子序列个数,在更新f[i]的时候顺便更新。t[i]=......
  • [ABC229E] Graph Destruction 题解
    [ABC229E]GraphDestruction题解思路解析题目要求删点,而众所周知删点的代价要大于加点的代价,于是我们考虑倒着处理询问,将每一个删点改成加点,而加点时就用并查集维护连通块即可。code#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+10;intn,m,fa[N];......
  • P10342 [THUSC 2019] 数列 题解
    形式化题面:求\[\sum_{l=1}^{n}\sum_{r=l}^{n}\max_{i=l}^{r}(i-l+1)\timesf(i,r)\]其中\(f(l,r)\)为\(a_l,...,a_r\)中有多少个不同的数字。注意到,除了Sub2,其余数据点都有\(\maxf\le800\),这启发我们考虑\(O(nm)\)的算法。套路地,扫描线枚举右端点,则现在只需要考虑......
  • [ABC212E] Safety Journey 题解
    [ABC212E]SafetyJourney题解思路解析首先根据题目的条件我们可以想到dp,用\(f_{i,j}\)表示走了\(i\)步,现在在\(j\)的方案数,可见转移即是\(f_{i,u}\gets\sum{f_{i-1,v}}\),这里的\(v\)表示每个与\(u\)相连的点。可见如此做时间复杂度为\(O(kn(\frac{n(n-1)}{2}-m......
  • ICPC2023南京站题解(A C D F G I L M)
    本场金牌线为7题前一半。做出8题可稳金牌,这里是难度前8题的题解。ICPC2023南京站I:签到题。#include<bits/stdc++.h>#definelllonglong#defineQWQcout<<"QwQ"<<endl;#defineFOR()llle=e[u].size();for(lli=0;i<le;i++)usingnamespacestd;constllN=501010;......
  • [ABC208D] Shortest Path Queries 2 题解
    [ABC208D]ShortestPathQueries2题解思路解析此题的本质其实就是Floyd。我们在进行Floyd时会有一个\(k\)充当中间点,可见这里的\(k\)就等于题目当中的\(k\),因为小于等于\(k\)的所有点都被当作过中间点转移过,而大于\(k\)的所有点都没有被当作过中间点转移过,于是直......
  • P3978 [TJOI2015] 概率论 题解
    题意:求一棵\(n\)个节点的有根二叉树的叶子节点的期望个数。设\(f_n\)表示\(n\)个点的二叉树个数,\(g_n\)表示\(n\)个点的所有二叉树的叶子节点数之和。显然\(f_n\)为\(\text{Catalan}\)数,考虑如何求\(g_n\)。一个结论是:\(g_n=f_{n-1}\timesn\)。证明:对于每一......
  • [题解][2021-2022年度国际大学生程序设计竞赛第10届陕西省程序设计竞赛] Cute Rabbit
    题目描述有n只兔子,每个兔子上有一个数ai。要将所有兔子分为白色和绿色两堆,使所有白色兔子的数对绿色兔子取余结果相等。求绿色兔子的最大数量。题解考虑一种情况:把所有除了最小值的数都涂为绿色,此时显然满足条件。对于一般情况:可以枚举白绿兔子的分割线x。对于小于x,试将其全......
  • 前端项目安装node-sass依赖问题解决
    前端项目安装依赖node-sass问题解决记录:(项目中node版本14.16.0node-sass版本4.14.1)问题1:pnpnrunall:install后报错MSBUILD:errorMSB3428:解决方法:需要安装npminstall--globalwindows-build-tools1.1、npm全局安装windows-build-tools1.1安装过程中可能会出现......
  • [题解] [CCPC陕西省赛2022 H题] Cute Rabbit
    [CCPC陕西省赛2022H题]CuteRabbit题目描述有\(n\)只白色的兔子,把其中\(m\)只染成绿色。每只兔子上有一个数\(a_i\),如果所有白色兔子上的数对所有绿色兔子上的数两两取余的值均相同,则该种染色方式合法,求能够使染色合法的最大的\(m\)。输入格式第一行有一个整数\(n(......