题意:
给定一个字符串,可以任意增删改,使其每四个字符为一组都为回文串,问最小操作步数

#include<bits/stdc++.h>
using namespace std;
int t[10];
int g[10][5];// 原长度为g[i][j] 为原长度为i的模式串变为长度为j的模式串的最短编辑距离
int w[3000000];//将模式串映射成一个数字,代表其权值
void dfs(int n, int c, int idx)//预处理每个模式串变为合法子串所需要的消耗。
{   // cout << idx << endl;int m = 9999999;if (n)for (int a = 1; a <= 7; a++)for (int b = 1; b <= 7; b++){int p[5] = { 0,a,b,b,a };memset(g, 1, sizeof g);for (int i = 0; i <= 4; i++)g[0][i] = i;for (int i = 0; i <= 7; i++)g[i][0] = i;for (int i = 1; i <= n; i++)for (int j = 1; j <= 4; j++)g[i][j] = std::min(std::min(g[i - 1][j] + 1, g[i - 1][j - 1] + (t[i] != p[j])), g[i][j - 1] + 1);if (g[n][4] < m)m = g[n][4];}if (n)w[idx] = m;if (n == 7)return;n++;for (int i = 1; i <= c; i++){t[n] = i;dfs(n, c, idx * 10+ i);}t[n] = c + 1;dfs(n, c + 1, idx * 10 + c + 1);
}char s[1000001];
int dp[1000001];// dp[i]为当前长度为i变成合法条件的最小步数
int last[26];
int pre[1000001];//每个字符出现的上一个位置
void sol()
{scanf("%s", s + 1);int n = strlen(s + 1);memset(dp + 1, 10, n * 4);memset(last, -1, sizeof last);for (int i = 1; i <= n; i++)//映射方法{pre[i] = last[s[i] - 'a'];last[s[i] - 'a'] = i;}for (int i = 0; i < n; i++){dp[i + 1] = std::min(dp[i + 1], dp[i] + 1);int cnt = 0;int idx = 0; int tmp[8];for (int j = 1; j <= 7; j++)tmp[j] = 0;for (int j = 1; j <= 7 && i + j <= n; j++){//int c = s[i + j] - 'a';if (pre[i + j] <= i)//在上一个出现的位置是在前i个,说明是一个新的字母idx = idx * 10 + (tmp[j] = ++cnt);else//当前字符等于之前的字符的编码idx = idx * 10 + (tmp[j] = tmp[pre[i + j] - i]);//将当前串变为模式串并转换成相应下标值。dp[i + j] = std::min(dp[i + j], dp[i] + w[idx]);}}printf("%d\n", dp[n]);
}
int main()
{dfs(0, 0, 0);int t;scanf("%d", &t);while (t--)sol();
}

Hdu2022 多校训练(5) BBQ相关推荐

  1. HDU6578 2019HDU多校训练赛第一场 1001 (dp)

    HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...

  2. 2019牛客多校训练第十场F Popping Balloons

    2019牛客多校训练第十场F Popping Balloons 题意:二维平面内给你若干个点,然后你可以在x轴和y轴分别射三枪(每一枪的间隔是R),问最多能射掉多少气球. 题解:贪心.这个应该只能算作 ...

  3. 【2019杭电多校训练赛】HDU6681 / 1002-Rikka with Cake 题解(扫描线)

    [2019杭电多校训练赛]HDU6681 / 1002-Rikka with Cake 题解 题意 思路 代码 题目来自于:HDU6681 Rikka with Cake 题意 题目的大意是给定你一个 ...

  4. 2018牛客网暑假ACM多校训练赛(第二场)E tree 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round2-E.html 题目传送门 - 2018牛客多校赛第二场 E ...

  5. 2013多校训练赛第三场 总结

    HDU 4621~4631 今天的多校好变态,是IOI冠军出的题,把我们虐的半死了. 简单讲一下今天的情况,今天就只做了两道水题,算是签了个到,然后就卡1011(HDU 4631)一个下午了.其实感觉 ...

  6. 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他...

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html 题目传送门 - 2018牛客多校赛第三场 I ...

  7. 【多校训练】2021牛客多校第一场

    [前言] 组队训练的第一场比赛,感觉这场出题十分阴间,后面几个乱搞题根本不会.jpg 赛时只过了5题,rk123,学校参加5/8. A. Alice and Bob [题意] 两人博弈,每次一个人从一 ...

  8. 2015年多校训练总结

    昨天最后一场多校终于结束了,虽然被虐成狗,但是还是学了不少的东西,同时认识到了自己很多地方的不足.下个学期打算把还没有学到的东西刷一下专题. 主要有:概率与期望(主要没做过题).矩阵和方程组(题目没做 ...

  9. 【多校训练】2021HDU多校4

    [前言] 今天写题手感很好,写的都是1A,然而太蠢了做不动- - 开场自己切了三个水题,队友写了一个水题就开始搞不动了,后面就过了一个05. 字符串如此SB的东西都忘了,今天赶紧补回来了. rk53, ...

最新文章

  1. 快速排序 c++_算法浅谈——分治算法与归并、快速排序(附代码和动图演示)
  2. 解决docker pull镜像速度慢的问题
  3. NEO改进协议提案2(NEP-2)
  4. MySQL 切换数据库、用户卡死:“You can turn off this feature to get a quicker startup with -A“处理方法
  5. mysql查询唯一单词_MySql从表中获取唯一单词列表,其中字段中的值用逗号分隔
  6. 少儿编程100讲轻松学python(九)-python如何判断字符串是否为整数
  7. 201521123035《Java程序设计》第八周学习总结
  8. YII 返回值为JSON格式
  9. sql服务器数据库主文件,数据库文件和文件组
  10. Netty 是什么,Netty原理详解
  11. Html制作知识库管理系统,知识库管理系统(源码+数据)
  12. c语言is_int(),C程序设计英文试题
  13. 搭建Spark开发环境(第二弹)
  14. VR全景在线虚拟展厅实现全方位沉浸式互动体验
  15. Hadoop基本组成
  16. 视网膜图像分割数据集整理
  17. 【北上广招聘】中企高呈找人:内容营销经理、SEM运营经理、KA客户经理...
  18. 实现web多层级文件压缩并下载
  19. android bilibili弹幕技术解析,bilibili高并发实时弹幕系统的实战之路(1)
  20. TMS320F2812的EALLOW和EDIS指令

热门文章

  1. gpt mac linux window guid type,parted解决超大容量磁盘分区 GPT分区表
  2. 非理工科编程零基础文科生秒懂python学习笔记:pandas库数据表格创建和运算基础有哪些?
  3. “注水”的新力与“错付”的陈凯
  4. 微信沟通的当下,你有多久没登陆过QQ?
  5. tengine简单安装_阿里云tengine的安装 -- by hzw
  6. 机器学习与统计建模 —— 归一化和标准化
  7. linux pwm控制蜂鸣器 滴滴_第七章----pwm蜂鸣器
  8. 供应商主数据屏幕增强XK02,XK03
  9. QAX答题页面js逆向分析(二)
  10. 手把手教你编译RS GIS开源库(一)编译ECW3.3库