首页 > 其他分享 >ABC325G offence 题解

ABC325G offence 题解

时间:2023-12-05 22:11:05浏览次数:38  
标签:int 题解 long leq rg ret offence ABC325G define

给出一个长为 \(n\) 的字符串和非负整数 \(k\)。你可以进行以下操作若干次,使得最终字符串长度最小。

选择一个字串 of。然后删掉 of 以及这之后的 \(i\) 个字符。\(i\) 由你决定,但要满足 \(0\leq i\leq k\)。

输出这个最小长度。\(1\leq n,k\leq 300\)。

做完以后感觉很简单。但是做的时候绕了个大大大大大的弯。

观察最终局面。在原字符串中的表现就是有若干连续段被删除。

8

设 \(F(l,r)\) 为子串 \([l,r]\) 的答案。

如果 \(F(l,r)\) 不能全部被删完(也就是有黑色部分),则一定存在一个 \(i\),\(F(l,r)=F(l,i)+F(i+1,r)\)。

那做法就很显然了:

  • 判断 \([l,r]\) 能否被删完。若能,\(F(l,r)=0\)。
  • 否则,\(F(l,r)=\min\{F(l,i)+F(i+1,r)\}\)。

然后我一开始将这两个视作完全独立的问题。结果试了很久都没有试出咋判断。

后来啊,我有些绝望了。直到那一秒,我灵光一现。

我现在要找到对于可以完全删完的串的必要条件。观察 \(l\),它一定要是 'o'。

后面要有一个 'f' 与它匹配。设第 \(i(a_i=f)\) 位与 \(l\) 匹配。

那么 \([l+1,i-1]\) 需要删完。\([i+1,r]\) 里有一些是这一次匹配顺便删的,剩下要删完。

想到这里我才明白。

第一个条件意味 \(F(l+1,i-1)=0\)。第二个意味 \(F(i+1,r)\leq k\)。

本来我使用了一个新的函数描述能否删干净。完全没有想到用第二个 \(\leq k\) 这个东西。

判断的方法已经很显然了。枚举 \(i\),然后判断 \(F\)。

时间 \(O(n^3)\)。我一开始的尝试写的是记忆化,后来干脆全写记忆化了。

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define rg register
#define ld long double
#define ull unsigned long long
#define epb emplace_back
#define getc getchar
#define putc putchar
using namespace std;
inline int re() {
	rg int x=0,p=0;rg char c=getchar();
	while(c<'0'||c>'9') (!p)?(p=c=='-'):(p=p),c=getchar();
	while('0'<=c&&c<='9') (x*=10)+=c-48,c=getchar();
	if(p) x=-x;
	return x;
}
inline void wt(rg int x) { if(x>9) wt(x/10);putc(x%10+48); }

const int N=305;
int n,k,f[N][N],ans=10000;
char a[N];
int F(int l,int r) {
	if(f[l][r]!=100000) return f[l][r];
	
	int ret=0;
	{
		if(l>r) ret=1;
		else if(r-l+1==1||a[l]!='o') ret=0;
		else {
			if(a[l+1]=='f'&&F(l+2,r)<=k) {
				ret=1;
			} else {
				for(int i=l+1;i<=r;i++) {
					if(a[i]=='f'&&F(i+1,r)<=k&&F(l+1,i-1)==0) {
						ret=1;
						break;
					}
				}
			}
		}
	}
	if(ret) return f[l][r]=0;
	
	for(int i=l;i<r;i++) f[l][r]=min(f[l][r],F(l,i)+F(i+1,r));
	return f[l][r];
}
int main() {
//	freopen(".in","r",stdin),freopen(".out","w",stdout);
	scanf("%s",a+1);
	n=strlen(a+1);k=re();
	for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) f[i][j]=i==j?1:100000;
	wt(F(1,n));
}

标签:int,题解,long,leq,rg,ret,offence,ABC325G,define
From: https://www.cnblogs.com/2008verser/p/17878432.html

相关文章

  • CTFpwn格式化字符串两种应用及2023ISCTF的fmt题解wp
    三个例子的引入目前我遇到的格式化字符串漏洞(formatstring,后文简称fmt)主要存在于printf函数,本文也就以printf举例。例一,标准格式的printf read(0,buf,33);printf("%s",buf);例二,占位符与变量 printf("%d%c%s",a,b,c);//%d%c%s会访问变量以输出整型,字符等。其中a,b,c为三......
  • [AGC032D] Rotation Sort 题解
    题目链接点击打开链接题目解法题目中的操作可以理解为一个点移动位置首先给出一个结论:每个点只会动至多一次考虑\(dp\)一个比较妙的状态设定是\(f_i\)表示\(i\)不动的方案数不妨枚举\(j\)表示上一个不动点,限制是\(j<i\)且\(p_j<p_i\)中间满足\(j<k<i\)且\(p_......
  • [AGC037D] Sorting a Grid 题解
    题目链接点击打开链接题目解法从后往前推一下,可以得到\(C\)一定要把每一行的数都归位到那一行,\(B\)一定要每一列的目标行数互不相同考虑构造\(B\)这个限制看起来略有些网络流,所以考虑如何建图令\(a_{i,j}\)的目标行数为\(ln_{i,j}\),我们由\(i\toln_{i,j}\)连边不......
  • [ABC254E] Small d and k 题解
    题目传送门一道暴力题。度数和\(k\)那么小?直接暴力\(n\)遍bfs,注意bfs的队列只能push距离不超过\(3\)的点。但有个问题,每次bfs都需要清空一次距离数组,这样子的时间复杂度是\(O(n^2)\)的。但也不难想到,距离数组中被赋值的地方不会很多,记录一下就行。Code#include......
  • RestTemplate 请求 webservice 中文乱码问题解决【问题解决】
    添加一个Converter设置UTF-8编码@ConfigurationpublicclassRestTemplateConfig{@BeanpublicRestTemplaterestTemplate(){RestTemplaterestTemplate=newRestTemplate();//添加自定义的ClientHttpRequestInterceptor全局JSON請......
  • [ARC141D] Non-divisible Set 题解
    题目链接点击打开链接题目解法很思维的题,需要用好所有的特殊性质暴力的做法是建出图,然后求包含点\(i\)的最长反链,但这明显过不了上面的做法没用到\(a_i<2m\)的性质如何用?把\(a_i\)拆分成\(q\times2^k\;(k\)为奇数\()\)的形式,那么对于同一个\(q\),只能在其中选一个......
  • [ARC141E] Sliding Edge on Torus 题解
    题目链接点击打开链接题目解法比较套路的题首先画个图,然后把\(y-x\)相同的变成一个点(使\(y>x\))然后再两个点之间连有权边那么问题就变成求新图的每个连通块中形成的原图的连通块数量手玩几个数据发现,原图的连通块数量即为新图的所有环长的\(\gcd\),再和\(n\)的\(\gcd......
  • [AGC061C] First Come First Serve 题解
    题目链接点击打开链接题目解法易知总情况数为\(2^n\)考虑重复计算的情况为:存在\([l_i,r_i]\),满足没有\([l_j,r_j](i\neqj)\)选在此区间中可以得到一个容斥的\(dp\)做法这个转移虽然感觉很显然,但卡了我一个晚上,一直调不出令\(f_i\)为到\(i\)的容斥情况下的权值和......
  • [CF1902] Educational Codeforces Round 159 A~E 题解
    [CF1902]EducationalCodeforcesRound159A~E题解A.BinaryImbalance很快观察到如果有不同的相邻元素,那么一定有解,意味着如果全是1无解,其他有解B.GettingPoints题面很长,可以发现,最好的偷懒方式一定是把所有的课都拖到最后几天上(真实),可以简单调整证明这样是不劣的,最后......
  • CF1833G Ksyusha and Chinchilla 题解
    题意:思路:当$n\not\equiv0\space(mod\space3)$时,无解;当$n\equiv0\space(mod\space3)$时,设$size_u$表示以$u$为根的子树还剩余的节点个数,自根节点向叶子节点递归,返回时进行处理节点$u$:设节点$u$的子节点为长度为$len$的序列$v$,设......