Palindrome subsequence【区间DP+冗斥】

2023-11-17

题目链接HDU-4632

 题目让我们求给定的一段字符串上回文串的长度(一个数也算是回文串),于是我就想怎样去找其中的规律,我举了些例子:

先是从相同的字符串开始举例“aaa”

对于aaa:dp[1][1]=1; dp[2][2]=1; dp[1][2]=dp[1][1]+dp[2][2]+1(因为1、2相同);......; dp[2][3]=dp[2][2]+dp[3][3]+1; dp[1][3]=dp[1][2]+dp[2][3]+1。显然,我们在相同的字符串上找到这样的规律:dp[i][j]=dp[i+1][j]+dp[i][j-1]+1

其次,我们得处理不同字符串的情况,于是举例“abc”

对于abc:dp[1][1]=1; dp[2][2]=1; dp[1][2]=dp[1][1]+dp[2][2]; ......; dp[2][3]=dp[2][2]+dp[3][3]; dp[1][3]=dp[1][2]+dp[2][3]-1。诶,这里发现会多出来个“1”,什么情况!?显然,在不同的情况下会有哪个地方出现问题了,那么怎么处理?这里看到abc,会发现在处理到abc的时候,就会多处理了一次b,那么我们类比一下几组大的数据,遇到abcdasd这样,会发现,因为i、j处的字符不同,所以中间的这段字符串就会多加一次,所以需要删除中间的dp[i+1][j-1],然而,相等的时候呢,abcdasa,此时由于头尾a的相等,故相当于中间部分的序列可以再外带一次外面的“a_a”,所以加上就没有问题。

 

状态转移方程

  • s[i]==s[j]时候:dp[i][j]=dp[i+1][j]+dp[i][j-1]+1;

  • others:dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1];

  • 细节:我WA了几发后意识到,此时需要运用到“-”,所以取模时先加上模值。

 

完整代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
using namespace std;
typedef long long ll;
const int maxN=1005;
const int mod=1e4+7;
char s[maxN];
int dp[maxN][maxN];
int main()
{
    int T;
    scanf("%d", &T);
    for(int Cas=1; Cas<=T; Cas++)
    {
        getchar();
        scanf("%s", s+1);   memset(dp, 0, sizeof(dp));
        int len=(int) strlen(s+1);
        for(int i=1; i<=len; i++)
        {
            for(int j=i; j>=1; j--)
            {
                if(s[i] == s[j]) dp[j][i]=(dp[j+1][i] + dp[j][i-1] +1)%mod;
                else dp[j][i]=(dp[j+1][i] + dp[j][i-1] - dp[j+1][i-1] + mod)%mod;
            }
        }
        printf("Case %d: %d\n", Cas, dp[1][len]);
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Palindrome subsequence【区间DP+冗斥】 的相关文章

  • Codeforces Round #291 (Div. 2)

    题目链接contest 514 A Chewba ca and Number 不允许有前导零 所以如果第一位是9的话 需要特别考虑 一开始理解错了题意 又WA了呜呜呜 include
  • DNA repair 【HDU - 2457】【AC自动机+DP思路】

    题目链接 开始肝这道题的时候也是冒了十足的勇气 呜呜呜 当时一直没发现 我有个地方写成了 s i A 怎么能这样用啊 毕竟只有A C G T的说 呜呜呜 QAQ 然后讲一下 这道题的AC自动机的想法 还有DP的思路 我DP超菜 能过也是超神
  • 形象讲解Android中dpi,dp和px之间的关系(设计师如何与程序员沟通)

    屏幕尺寸指屏幕 显示屏 对角线的长度 单位为英寸 dpi dots per inch 像素密度 指每英寸中的像素数 1 在android中 160dpi设备下 1px 1dp 160dpi表示一英寸中包含160个像素点 px 即把一英寸平均
  • Testing the CATCHER

    http poj org problem id 1887Description A military contractor for the Department of Defense has just completed a series
  • Beautiful Mirrors【Codeforces 1265 E】【期望DP】

    Codeforces Round 604 Div 2 E 题记 不是杭电今年份的原题嘛 为什么比赛的时候没想到这个方面呢 当然题也读错了 尬 杭电多校原题 然后再继续说一下这道题的特殊之处吧 随便说说 典型问题 没有特殊之处 大概画了个图
  • 最长01交替子串(浪潮笔试题)

    题意 给一个只有0和1的字符串 允许反转一个连续区间 即0变成1 1变成0 求最长的01交替串多长 允许不连续 我最先想到的是动态规划解法 状态设计方面 首先一个串的状态会有以0结尾和以1结尾两种 然后题目中说允许反转一个连续区间 那么根据
  • hdu 1074 Doing Homework

    Problem acm hdu edu cn showproblem php pid 1074 题意 n 份作业 分别给出名字 完成所需时间 cost 最迟上交时间 deadline 作业每迟交一天扣一分 问最少的扣分数 Analysis
  • 免费馅饼【暑期集训I题】【经典DP】

    这不是一道很废脑汁的题目 可以说和前面的数塔相同 只是题目讲的长了些而已 都说天上不会掉馅饼 但有一天gameboy正走在回家的小径上 忽然天上掉下大把大把的馅饼 说来gameboy的人品实在是太好了 这馅饼别处都不掉 就掉落在他身旁的10
  • 最大子矩阵(动态规划c++)

    题目描述 已知矩阵的大小定义为矩阵中所有元素的和 给定一个矩阵 你的任务是找到最大的非空 大小至少是1 1 子矩阵 比如 如下4 4的矩阵 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 的最大子矩阵是 9 2 4 1 1
  • hdoj-1069-Monkey and Banana【动态规划】

    Monkey and Banana Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 9489 Acc
  • hdu 1024 Max Sum Plus Plus

    Problem acm hdu edu cn showproblem php pid 1024 题意 给一个长为 n 的序列 有从中挑 m 个相互不重合的子序列求总和 让总和最大 分析 没能看懂百度的前几份题解 好像都跟 kuangbin
  • Daniel and Spring Cleaning【数位DP】【Codeforces 1245 F】

    Codeforces Round 597 Div 2 F 这道题化简一下就是让我们求有上下限的2进制数中有几对满足每一位的相 值不为1的对数 那么 首先看到这个1e9就会让人想到数位DP 然后接着就是如何去求的这样一个问题 我们不如将上下限
  • dp(动态规划)思考

    dp的核心思想是分治策略和表存储 分治策略并非dp所独有 很多算法都运用了把问题拆解为子问题的做法 比如递归 表存储应该是dp比较独有的一种方式 通过存储一些中间结果 可以避免重复计算 从而提升程序运行的速度 def max length
  • gym102263 problem J Thanos Power (dp)

    链接 题意 给出一个大数 有两种操作 加 1 0 x 10 x 10x和减 1 0
  • The Lost House【树形DP+期望+构造路径】

    题目链接 POJ 2057 题意 有一棵N的点的树 开始的时候蜗牛在1号结点 它不知道它的家在哪个叶子结点 树上的有些结点有虫虫 虫虫会告诉你 你的家是否在以它所在结点为根的子树上 现在需要你规划走的方案 使得找到哪个叶子结点才是家的所走路
  • 牛客网-网易2018笔试第7题 -合唱(DP问题)

    题目描述 小Q和牛博士合唱一首歌曲 这首歌曲由n个音调组成 每个音调由一个正整数表示 对于每个音调要么由小Q演唱要么由牛博士演唱 对于一系列音调演唱的难度等于所有相邻音调变化幅度之和 例如一个音调序列是8 8 13 12 那么它的难度等于
  • Crazy Thairs【树状数组+高精度+DP思想】

    题目链接 POJ 3378 题意 有N个点 问的是要求组成一个长度为5的上升子序列的组成有多少种 最搞事情的是这道题不用取模 所以 是一定会爆long long的 首先 很容易想到一点就是我们可以开一个dp maxN 5 表示的是 dp i
  • Acwing2554. 排列数

    在一个排列中 一个折点是指排列中的一个元素 它同时小于两边的元素 或者同时大于两边的元素 对于一个 1 n 的排列 如果可以将这个排列中包含 t 个折点 则它称为一个 t 1 单调序列 例如 排列 1 4 2 3 是一个 3 单调序列 其中
  • 洛谷P1028 [NOIP2001 普及组] 数的计算 —— 简单DP+双指针优化

    This way 题意 给出自然数 n n n 要求按如下方式构造数列 只有一个数字 n n n 的数列是一个合法的数列 在一个合法的数列的末尾加入一个自然数 但是这个自然数不能超过该数列最后一项的一半 可以得到一个新的合法
  • 【DP】拔河比赛

    题目 一个学校举行拔河比赛 所有的人被分成了两组 每个人必须 且只能够 在其中的一组 要求两个组的人数相差不能超过1 且两个组内的所有人体重加起来尽可能地接近 输入 输入数据的第1行是一个n 表示参加拔河比赛的总人数 n lt 100 接下

随机推荐

  • Linux 中的 cd 命令及示例

    cd命令在Linux 中称为更改目录命令 它用于有效地从当前工作目录移动到系统中的不同目录 Linux 中 cd 命令的语法 光盘 目录 cd directory 在这里 将 directory 替换为您要导航到的目标目录的路径 cd 命令
  • STM32的I/O口的8种工作模式

    转自http www openedv com posts list 21980 htm 浮空 顾名思义就是浮在空中 上面用绳子一拉就上去了 下面用绳子一拉就沉下去了 开漏 就等于输出口接了个NPN三极管 并且只接了e b c极 是开路的 你
  • 机械臂颜色识别案例

    大家好 我就是那个走在路上经常捡到宝的铁熊老师 那么今天捡到了啥好玩的东西呢 一台五自由度机械臂 从天而降出现在我面前 这话说出口 我自己都不信 哪有那么好的运气 其实这是朋友送我玩的 你也想要这台机械臂么 什么 你不要机械臂 你想要那个朋
  • C++ 游戏开发 打地鼠详解 (含.h文件和.cpp文件)

    基于easyx的打地鼠游戏 期末大作业 C语言版本请见 C语言 打地鼠游戏 超级详解 各个函数与算法 设计思路与流程 一 游戏简介 游戏简介 疯狂打地鼠 是一款经典的单机休闲益智类小游戏 调皮的小地鼠们又出来活动了 你需要做的就是将他们砸回
  • 关于Chrome浏览器这点儿事儿(一):基本尝试修改Chrome启动参数实现全屏禁用双指触摸缩放

    最近 刚上任项目boss 接触客户第一个需求便是浏览器需求 需求如下 其中标注红色的需求 是让我花了几十种方式尝试的主要源 自己做过C 知道可以嵌入外壳 有很多种方案 当然了参考了一位仁兄的文章 https www cnblogs com
  • 二进制安装mysql

    下载安装包 下载mysql二进制安装包 yum y install lrzsz numactl wget http mirrors 163 com mysql Downloads MySQL 5 7 mysql test 5 7 38 li
  • error C2676: 二进制“<”:“const _Ty”不定义该运算符或到预定义运算符可接收的类型的转换

    项目场景 C 中写优先级序列 序列内存的是自定义的结构体 在自定义比较方式的时候系统报错 error C2676 二进制 lt const Ty 不定义该运算符或到预定义运算符可接收的类型的转换 with Ty Node 问题描述 prie
  • Javascript使用turndown 将html 转为md

    1 安装turndown npm i turndown 2 使用trundown并保存为md文件 htmlToMarkdown let down new turndown let md down turndown this html let
  • bin、hex、elf、axf文件解析

    冰冻三尺非一日之寒 滴水穿石非一日之功 文章目录 引言 文件分类 1 bin文件 2 hex文件 3 axf文件 4 elf文件 总结 参考资料 深度理解编译过程 参考资料 深度理解编译文件 引言 bin hex elf axf作为嵌入式开
  • python数据可视化07

    1 绘制等高线图 import numpy as np import matplotlib pyplot as plt def calcu elevation x1 y1 h 1 x1 2 x1 5 y1 3 np exp x1 2 y1
  • 每日一题: 扑克牌中的顺子(C++)

    题目描述 从扑克牌中随机抽5张牌 判断是不是一个顺子 即这5张牌是不是连续的 2 10为数字本身 A为1 J为11 Q为12 K为13 而大 小王为 0 可以看成任意数字 A 不能视为 14 示例 1 输入 1 2 3 4 5 输出 Tru
  • Torchserve打包和部署你训练的深度学习模型

    一 Torchserve介绍 Torchserve是Facebooke公司开发的在线深度学习模型部署框架 它可以很方便的部署pytorch的深度学习模型 读者可以访问Github地址获取最新功能和详细说明 官方地址https github
  • Shell 中常用 Date 日期的计算

    在使用 Crontab 定时任务和 Shell 脚本切割 Nginx 日志文件时 要用到时间戳 当月 上月 下月 上月初 上月末 下月初 下月末等等 其中有些日期不能直接获取 需要经过一定的计算才能得到 一 Date 基础格式化 格式 输出
  • JVM性能优化 —— 类加载器,手动实现类的热加载

    一 类加载的机制的层次结构 每个编写的 java 拓展名类文件都存储着需要执行的程序逻辑 这些 java 文件经过Java编译器编译成拓展名为 class 的文件 class 文件中保存着Java代码经转换后的虚拟机指令 当需要使用某个类时
  • qt5.5程序打包发布以及依赖

    玩qt5也有一段时间了 惭愧的是一直没有好好的发布过程序 因为写的都是小程序没啥需要用到发布 而且qt也说不上很熟悉 本来打算到基本掌握qt之后再来研究研究怎么打包程序 最近晚上的空闲时间多了 闲着也是闲着 于是便来试试 在网上搜索了一下资
  • Newifi3(新路由3)刷潘多拉(Pandora)固件

    最近在淘宝入手了一个二手的newifi3 主要是因为它内存大 而且性价比相当高 512M的ddr2和32M的flash买下来才100左右 下面介绍如何刷 Pandora固件 步骤 1 找一根网线 一端插入路由器wan口 一端插入电脑 把电脑
  • Python爬虫从入门到精通:(11)数据解析_站长素材图片的爬取(爬取俄罗斯高清图片名称和地址)* _Python涛哥

    站长素材图片的爬取 爬取俄罗斯高清图片名称和地址 地址 https sc chinaz com tupian eluosi html 我们先来分析下页面 获取图片名称和地址定位 我们很容易获取到了图片名称和地址是在 div div div
  • SQL语句截取字段某指定字符的前半段/后半段内容

    最近项目中遇到一个小问题 需要从数据库中取出对应数据 并根据某个字段中的前半段内容进行排序 搜索资料后得以解决 现将解决方法记录如下 最初的查询SQL SELECT file name sort FROM base annexesfile
  • 盛最多水的容器

    给定一个长度为 n 的整数数组 height 有 n 条垂线 第 i 条线的两个端点是 i 0 和 i height i 找出其中的两条线 使得它们与 x 轴共同构成的容器可以容纳最多的水 返回容器可以储存的最大水量 说明 你不能倾斜容器
  • Palindrome subsequence【区间DP+冗斥】

    题目链接HDU 4632 题目让我们求给定的一段字符串上回文串的长度 一个数也算是回文串 于是我就想怎样去找其中的规律 我举了些例子 先是从相同的字符串开始举例 aaa 对于aaa dp 1 1 1 dp 2 2 1 dp 1 2 dp 1