【DP】小学生语文题(jzoj 5102)

正题

jzoj 5102


题目大意

给你两个串A,B,字母个数相等,可以把B的一个字符移到前面某个位置,问你最少移多少次可以使A,B相等


解题思路

fi,jf_{i,j}fi,j为A匹配了i-n,B用了j-n

1.当i,j匹配时fi,j=fi+1,j+1f_{i,j}=f_{i+1,j+1}fi,j=fi+1,j+1
2.也可以把j往前移,那么有fi,j=fi,j+1+1f_{i,j}=f_{i,j+1}+1fi,j=fi,j+1+1
3.如果i-n中AiA_iAi的个数比j-n中AiA_iAi的个数少,那么说明B中有剩余的移出来的AiA_iAi,可以填到i的位置,那么有fi,j=fi+1,jf_{i,j}=f_{i+1,j}fi,j=fi+1,j

DP时记录下从哪个状态转移过来

倒退一遍求出所有移动操作,然后把操作之间的影响加上


代码

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define fs first
#define sn second
#define mp make_pair
#define N 2021
using namespace std;
int T, n, x, y, w, c[N], ans[N][3], ns[N][30], nss[N][30], f[N][N], fr[N][N];
char s[N], ss[N];
vector<int>cl[30];
void add(int x)
{for (; x <= n; x += x&-x)c[x]++;return;
}
int ask(int x)
{int sum = 0;for (; x; x -= x&-x)sum += c[x];return sum;
}
int main()
{scanf("%d", &T);while(T--){scanf("%s%s", ss+1, s+1);n = strlen(s+1);memset(c, 0, sizeof(c));memset(ns, 0, sizeof(ns));memset(nss, 0, sizeof(nss));memset(f, 127/3, sizeof(f));for (int i = n; i > 0; --i){for (int j = 0; j < 26; ++j)ns[i][j] = ns[i + 1][j], nss[i][j] = nss[i + 1][j];ns[i][s[i] - 'a']++;nss[i][ss[i] - 'a']++;}f[n + 1][n + 1] = 0;for (int i = n + 1; i > 0; --i)for (int j = n + 1; j > 0; --j)//DP{if (f[i][j + 1] + 1 < f[i][j])f[i][j] = f[i][j + 1] + 1, fr[i][j] = 1;if (ss[i] == s[j] && i <= n && j <= n)if (f[i + 1][j + 1] < f[i][j])f[i][j] = f[i + 1][j + 1], fr[i][j] = 0;if (nss[i][ss[i] - 'a'] <= ns[j][ss[i] - 'a'] && i <= n && j <= n)if (f[i + 1][j] < f[i][j])f[i][j] = f[i + 1][j], fr[i][j] = 2; }printf("%d\n", f[1][1]);x = y = 1;w = 0;while(x != n + 1 || y != n + 1)//求操作{if (!fr[x][y]){add(x + 1);//树状数组求前面匹配的个数x++;y++;}else if (fr[x][y] == 2){cl[ss[x] - 'a'].push_back(x);x++;}else{ans[++w][0] = y;ans[w][1] = cl[s[y] - 'a'].back();ans[w][2] = ask(ans[w][1]);cl[s[y] - 'a'].pop_back();y++;}}for (int i = 1; i < w; ++i)for (int j = i + 1; j <= w; ++j)if (ans[i][1] <= ans[j][1])//互相影响ans[j][2]++;for (int i = 1; i <= w; ++i)printf("%d %d\n", ans[i][0], ans[i][2] + 1);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AT3949-[AGC022D]Shopping【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/AT3949 题目大意 长度为LLL的坐标轴上&#xff0c;给出nnn个点&#xff0c;每个点xix_ixi​需要购物tit_iti​的时间&#xff0c;一辆车在0∼L0\sim L0∼L折返跑&#xff0c;求从000出发购物完回到000的最短时间。 n∈[1,310…

现代软件工程的《构建之法》

要想了解世界&#xff0c;就必须亲自来打造它。—— 帕韦泽&#xff08;Cesare Pavese&#xff09;国庆假日期间&#xff0c;我重读了邹欣老师的《构建之法》一书。我从事软件行业相关工作超过15年&#xff0c;每每在被问到给在校计算机专业大学生的学习建议时&#xff0c;我都…

牛客练习赛 62

A.牛妹的游戏 Ramsey定理&#xff1a;人话解释任意六个人中要么至少三个人认识&#xff0c;要么至少三个不认识。 结论简要证明: 假设 666 个据点分别为 A,B,C,D,E,FA,B,C,D,E,FA,B,C,D,E,F那么在 A 连向其它据点的控制链中&#xff0c;必然至少有 333条链被同一方控制&#x…

【图论】【斜率优化】前往大都会(loj 2769)

正题 jzoj 7181 题目大意 给你由若干铁路组成的图&#xff08;一个铁路上有若干点&#xff09;&#xff0c;问你从1到n在最短路径的前提下&#xff0c;乘坐的每一条铁路所花费时间的平方和的最大值 解题思路 先用dij跑出最短路图&#xff08;即长度等于最短路的所有路径&…

AT4995-[AGC034E] Complete Compress【树形dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT4995 题目大意 nnn个点的一棵树&#xff0c;上面有一些棋子&#xff0c;每次可以选择两个棋子移动到他们之间的路径上相邻的点上&#xff0c;求最少多少步能移动到一个点上。 n∈[1,2000]n\in[1,2000]n∈[1,2000] 解题思路 …

【每日一题】8月10日题目精讲—排座椅

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 51200K&#xff0c;其他语言102400K 64bit IO Format: %lld题目描述 上课的时候总有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的…

使用Consul做服务发现的若干姿势

从2016年起就开始接触Consul&#xff0c;使用的主要目的就是做服务发现&#xff0c;后来逐步应用于生产环境&#xff0c;并总结了少许使用经验。最开始使用Consul的人不多&#xff0c;为了方便交流创建了一个QQ群&#xff0c;这两年微服务越来越火&#xff0c;使用Consul的人也…

【费用流】【线性规划】志愿者招募(luogu 3980)

正题 luogu 3980 题目大意 有n个时刻&#xff0c;第i个时刻需要aia_iai​个志愿者&#xff0c;有m类志愿者&#xff0c;第j类可以从ljl_jlj​做到rjr_jrj​&#xff0c;代价为wjw_jwj​&#xff0c;数量无限&#xff0c;问你使所有时刻志愿者个数都足够的最小代价 解题思路 …

YbtOJ#643-机器决斗【贪心,李超树】

正题 题目链接:https://www.ybtoj.com.cn/problem/643 题目大意 nnn个机器人&#xff0c;第iii个攻击力为AiA_iAi​&#xff0c;防御为DiD_iDi​。 然后你每次可以对一个机器人造成AtkAtkAtk点伤害&#xff0c;之后所有机器人对你进行一次攻击。 开局可以删除两个机器人&…

【每日一题】8月11日题目精讲—矩阵消除游戏

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 牛妹在玩一个名为矩阵消除的游戏&#xff0c;矩阵的大小是n行m列&#xff0c;第i行第…

牛客练习赛 61(待补F-点分治?)

A. 打怪 先求出每次打死一只怪需要掉多少血&#xff0c;然后就直接算出能够打死多少只。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; int main() {IO…

asp.net core集成CAP(分布式事务总线)

一、前言感谢杨晓东大佬为社区贡献的CAP开源项目&#xff0c;传送门在此&#xff1a;.NET Core 事件总线,分布式事务解决方案&#xff1a;CAP 以及 如何在你的项目中集成 CAP【手把手视频教程】&#xff0c;之前也在工作中遇到分布式数据一致性的问题&#xff0c;也一直都是基于…

Ybt#452-序列合并【期望dp】

正题 题目链接:https://www.ybtoj.com.cn/contest/113/problem/2 题目大意 一个空序列&#xff0c;每次往末尾加入一个[1,m][1,m][1,m]中的随机一个数。如果末尾两个数相同都为xxx且(x<t)(x<t)(x<t)&#xff0c;那么将它们合并成x1x1x1。 如果序列长度为nnn且无法合…

【Trie】【费用流】管道监控(loj 3026)

正题 loj 3026 题目大意 给你一棵树&#xff0c;和若干匹配串&#xff0c;如果一个节点向下的某条链构成了匹配串i&#xff0c;则可以花费这w_i匹配这条链&#xff0c;问你匹配完所有点的最小代价 解题思路 这题可以理解为树上树上的线性规划 先对于每个匹配串倒着建trie&a…

【每日一题】8月12日题目精讲 Mr. Kitayuta, the Treasure Hunter

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 The Shuseki Islands are an archipelago of 30001 small islands in the Yutampo Se…

.Net Core中利用TPL(任务并行库)构建Pipeline处理Dataflow

在学习的过程中&#xff0c;看一些一线的技术文档很吃力&#xff0c;而且考虑到国内那些技术牛人英语都不差的&#xff0c;要向他们看齐&#xff0c;所以每天下班都在疯狂地背单词&#xff0c;博客有些日子没有更新了&#xff0c;见谅见谅 什么是TPL?Task Parallel Library (T…

AT3950-[AGC022E]Median Replace【贪心,dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT3950 题目大意 一个包含?,0,1?,0,1?,0,1的长度为奇数的序列&#xff0c;把???替换为0/10/10/1。每次可以选择三个数变成它们的中位数&#xff0c;求有多少种替换方案使得能够把序列最终变为一个111。 1≤∣S∣≤3105…

【excrt】屠龙勇士(luogu 4774)

正题 luogu 4774 题目大意 有n条龙&#xff0c;第i条血量为aia_iai​&#xff0c;回血量为bib_ibi​&#xff0c;杀死后掉落伤害为DiD_iDi​的刀&#xff0c;初始有若干刀 杀第i条龙要用现有伤害比aia_iai​小的刀中伤害最大的&#xff08;如果没有就用伤害最小的&#xff0…

牛客练习赛 60(待补E-长链剖分或者dsu)

A.大吉大利 位运算有独立性&#xff0c;按位计算对答案的贡献即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; typedef uns…

.NET Core Agent

熟悉java的朋友肯定知道java agent&#xff0c;当我看到java agent时我很是羡慕&#xff0c;我当时就想.net是否也有类似的功能&#xff0c;于是就搜索各种资料&#xff0c;结果让人很失望。当时根据 https://github.com/OpenSkywalking/skywalking-netcore 找到这个 https://d…