1029练习题 B 从头再来

1029练习题 B 从头再来

KONO题面哒!

问题描述
WX2004作为一个非酋,玩什么都必须要用人海战术来堆死对面。这天他打开GFL,发现自己因为太菜太非被YM降级了。他对自己太菜这个事实感到十分懊悔,于是准备改过自新。他统计了自己以前拥有的人形和现在拥有的人形,并把他们按星级用字母编号,然后用一种不可描述的玄学方法排序得到了两个字符串s,t。现在他正在编队去打核心8,。由于他又菜又非,他只好把自己所拥有的人形(即t序列)按顺序分出k个组和铁血车轮战。但他太想念被降级之前的队伍,于是要求这k个队伍的字符串都能在原人形(即s序列)中找到并且顺序相同。现在他已经因抽不到陈自闭了,请你来帮他算出自己能塞多少个人形进队伍。
:按星级用字母编号即用a,b,c……来代替1,2,3……。由于此时的GFL经过了数次更新,所以不只有6个星级,有26个。)
题目大意:从s,t中选出k个不相交的连续的非空子串,保持每个子串在 s ,t中的相对位置顺序,使得每个相对的子串相同并求出所有子串长度和的最大值。给出的s,t中只有小写字母)
输入格式
第一行三个整数 n,m,k ,分别代表字符串 s,t 的长度,选出的子串的个数。
第二行一个字符串 s .
第三行一个字符串 t .

输出格式
一行一个整数,表示选出的子串长度之和的最大值。

样例输入
15 9 4
ababaaabbaaaabb
bbaababbb
样例输出
8

数据范围
\(n,m ≤ 1000,k ≤ 10\)



看得出来原题面的人都是鬼才



第一眼动归。然后我就打炸了。最后我交了个搜索,Wa0。

动归思路:

  • 状态:\(F[i][j][l][s]\)表示s序列中取到i号位,t序列中取到j号位,现在取了l组人形,第i,j号人选不选(0为必须选,1为可选可不选)
  • 状态转移方程:
    • \(s[i]!=t[j]\):\(f[i][j][l][1]=max(f[i-1][j][l][1],f[i][j-1][l][1])\)(都可选可不选并不能开新组,把上一个状态赋值过来)
    • \(s[i]=t[j]\):\(f[i][j][l][0]=f[i-1][j-1][l-1][1]+1\)(可以开新组)
      • 若此时:\(s[i-1]=t[j-1]\):\(f[i][j][l][0]=max(f[i][j][l][0],f[i-1][j-1][l][0]+1)\)(不开新组)
      • 判断完上一个条件后,\(f[i][j][l][1]=max(f[i][j][l][0],max(f[i-1][j][l][1],f[i][j-1][l][1]))\)(一般通过转移)
        (应该算是很好理解了吧……)

KONO代码哒!

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int n,m,k;
char tmp[1010];
int f[1010][1010][11][2];
int a[1010],b[1010];
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    int l,i,j;
    scanf("%s",tmp);
    for(i=1;i<=n;i++)a[i]=tmp[i-1]-'a';
    scanf("%s",tmp);
    for(i=1;i<=m;i++)b[i]=tmp[i-1]-'a';
    for(l=1;l<=k;l++)
    {
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                if(a[i]==b[j]){
                    f[i][j][l][0]=f[i-1][j-1][l-1][1]+1;
                    if(a[i-1]==b[j-1]){
                        f[i][j][l][0]=max(f[i][j][l][0],f[i-1][j-1][l][0]+1);
                    }
                    f[i][j][l][1]=max(f[i][j][l][0],max(f[i-1][j][l][1],f[i][j-1][l][1]));
                }
                else f[i][j][l][1]=max(f[i-1][j][l][1],f[i][j-1][l][1]);
            }
        }
    }
    printf("%d\n",f[n][m][k][1]);
}

瞎改题面.jpg

原文地址:https://www.cnblogs.com/cooper233/p/11768172.html

时间: 2024-10-16 16:51:33

1029练习题 B 从头再来的相关文章

不再年轻,仍从头再来

近日我的两个宝贝相继过生日,给我很多感触,被生命和生活所感动,被各种爱和各种细节所激动,我是一个可怕可恨的工科男,有时敏感,有时性情,有时忧郁,有时愤青,有时假装文艺,有时也很装,这些五花八门乱七八糟的怪里怪气注定了我无法达到常人所想象的高度和境界,我只能在那个小小的圈子世界里偶尔闹腾一下,这是悲情的,但依然未放弃做大做强的梦想,梦想这个东西,有时就是人的一口气,没气也就挂掉了,因此一定保持这口气,并不够地充气. 我马上38岁了,这个年龄应该是春风得意的时候,可我还是处于潜力阶段,这很可笑,假如

一切将从头再来

我确实不知道怎样去写好一个开头,正如三年前,不知道怎样去迎接一个全新的学习领域,没有充足的准备,只得去挣扎着,去调适着各种莫名其妙的算法,去猜想各式各样的指针,去记忆各式各样的算法,去尝试各式各样的语言,结果到处碰壁,大多都以无路可退开始,以愿赌服输结束.常言到,时光可以抹掉一个人身上的棱角,我曾经在三年前想象各式各样被抹掉的方式,或因为现实,或因为爱情,或因为梦想,怎么也没想到过是因为懒惰,因为每天晚上玩到凌晨,每天中午才起的作息时间.我曾经在三年前想象各式各样的大学生活,那里有关乎于团队,关

2016CCPC 合肥--最大公约数//每一年通向它的路上,多少人折戟沉沙,多少人功败垂成,有人一战成名,有人从头再来。

有这样一个有关最大公约数的函数:函数 f(x, y): { c=0 当 y>0: { c +=1 t = x % y x = y y = t } 返回 c * x * x} 给出三个正整数n,m,p,你需要计算: ∑i=1n∑j=1m?i?jf(i,j) 对p取模的结果. 1 #include <stdio.h> 2 #include <iostream> 3 #include <stack> 4 #include <algorithm> 5 #inc

Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统

http://www.cnblogs.com/MYSQLZOUQI/p/5257200.html glibc库是什么?没有glibc库,就没有Linux.我们平时用过的malloc和strcpy等函数都是glibc这位仁兄提供的.除此之外,它还提供了网络编程中要用到的Socket API接口.之前曝光的glibc库漏洞 f

【第八周】回到起点,从头再来

在这近两个月里的时间里,耗费了几乎所有周末的时间来做项目开发.现在项目开发已经完成,我所得到的一些感想在这与大家一同分享. 在项目开发伊始,我们就确定了总体的设计框架.本以为这样事情就完成了大半,以为有了大概的框架,我们往里面添加东西就行了,事实证明确实是我想多了.比如,在GUI交互这一块,要怎么实现GUI之间的通信,要怎么添加网络接口给GUI,客户端要怎么与GUI实现交互,客户端要怎么实现消息的同步发送等.一个整体的框架根本解决不了所有问题,其中的细节问题多到让我们难以想象.当然,最后我们还是

从头再来 往事如烟 推荐IT技术网站

今天刚重新注册了博客,好多年没写博客了.以后每周至少写三篇博客,至少1篇原创. 给大家推荐一些IT行业技术人必须学习成长的网站. 力扣 对算法.数据结构.搜索.数学方面应用感兴趣的,可以去学习  https://leetcode-cn.com/ 思否 中国的质量较高的技术社区 https://segmentfault.com/ 人人都是产品经理 技术人升级之路必不可少  http://www.woshipm.com/ 即时通讯网 对通讯感兴趣的必看 http://www.52im.net/ do

春节学习之从入门到放弃学习 ~~~废材大学几年没学,从头开始系列01

大年初四,春雨绵绵,闲着在家实在没有什么事,这个年纪好多小伙伴都玩不起来啦,于是我想到了学习,学习,大概这个号忘了几年的密码,才想起来,发现还是特么学习好晚,好打发时间... 上午,一家人坐在沙发前,看江西卫视的天龙八部,记得第一次看时还是在小学的时候,那个时候可好看啦,要是现在看书有那个时候有劲就好啦...233 因为马上要找工作,以前看的数据结构,连概念都不知道啦,从头再来,从入门到放弃系列...从定义开始... 栈stack):只允许在一端进行插入或删除操作的线性表.首先栈是一种线性表,但

如何学好C语言/C++

版主Qq:877451122加我一起学习c语言?????????? 如何提高C语言的编程能力: 学习C语言,谭浩强的<C程序设计>是一部非常好的C语言书籍,学习程序设计是一个非常漫长的过程,不要着急,一本书多看两遍三遍,学会交叉学习法,在学习C的过程中,可以看看数据结构,编译原理,操作系统等书籍,对编成都是很有帮助的.最开始学习的时候,先不要编一些比较大的程序,多编一些小程序,比如数组运算,字符组合等等,指针是C语言的精华,是比较复杂的部分.看到你的情况,编了一个学习系统,对语言的驾驭能力还是

学前感悟

我写东西从来都是意识流的,只是想到了并且觉得对自己有益就想把它记录下来,从而作为自己的成长.其实是自己遇到了问题从而引发了思考,入互联网行业已经有将近一年的时间了,学习了好多新的技术,多,杂,不精,这样有一方面的好处就是增加了对整体互联网的理解,另一方面的不好就是还没有一技之长,不足以更好的养家糊口,于是,琢磨学习一门开发语言,总觉得干IT不会写代码不像回事,所以选择了学习Python. 买了本书,看了基础部分,拿了一个练习项目,通过百度,google一些难点,我发现我也能自己把项目完成了,至于