$f[i][j]$表示到第$i$个字符,已经删去了$j$个字符的方案数。

显然的转移:

$f[i][j] = f[i - 1][j] + f[i - 1][j - 1]$

但是这样会有重复,我们考虑什么情况会重复。

比如说:'aabab'中的'bab',我们删去'ba',得到'aab',删去'ab'得到'aab',两者是相同的

1 2 3 4 5

a a b a b

我们假设之前的每一位存的都是没有重复的方案数

就刚才的情况,我们发现当我们递推到第$5$个位置的时候,删去第三位和第四位的'ba',但是保留着第五位的'b'

那这种情况和递推到第$3$个位置的时候,保留着第$3$位的'd'是一样的

即:

$f[5][2] = f[2][0]$

$f[5][3] = f[2][1]$

减去这些重复情况,我们就能保证已经递推过来的情况中没有重复情况

 #include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 1000010
int n;
char s[N];
int pos[];
ll f[N][]; int main()
{
while (scanf("%s", s + ) != EOF)
{
memset(pos, -, sizeof pos);
n = strlen(s + );
f[][] = ;
for (int i = ; i <= n; ++i)
{
int d = pos[s[i]];
pos[s[i]] = i;
f[i][] = f[i][] = ;
for (int j = ; j < ; ++j)
{
f[i][j] += f[i - ][j];
f[i][j + ] = f[i - ][j];
if (d != - && j - i + d >= )
f[i][j] -= f[d - ][j - i + d];
}
}
printf("%lld\n", f[n][] + f[n][] + f[n][] + f[n][]);
}
return ;
}

PTA 团体程序设计天梯赛 L3-020 至多删三个字符的更多相关文章

  1. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  2. PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集

    L2-001 紧急救援 (25 分)   作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...

  3. 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  4. 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  5. 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  6. 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  7. 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  8. 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  9. 团体程序设计天梯赛(CCCC) L3009 长城 方法证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

随机推荐

  1. zabbix高级玩法之通过xml文件一次性导入

    author:headsen  chen date: 2018-11-10  10:08:38 背景:zabbix的硬件监控架构已经部署完成,接下来就是创建主机这一步,2400台主机如果采用一台台的创 ...

  2. 【CF913G】Power Substring 数论+原根

    [CF913G]Power Substring 题意:T组询问,每次给定一个数a,让你求一个k,满足$2^k$的10进制的后$min(100,length(k))$位包含a作为它的子串.你只需要输出一 ...

  3. Unity3D笔记 愤怒的小鸟<一>场景切换

    新建3个场景,场景1 Start 十秒后自动切换到场景2 Splash,场景2在二秒后自动切换到场景3 Selection 一.场景一Start 二.场景2 Splash 三.场景3 Selectio ...

  4. jfinal的model和record如何相互转化?

    一.model转record: Model类: 1. /** * Convert model to record. */public Record toRecord() { return new Re ...

  5. vue--提取公共方法

    在做一个项目的时候,一些组件内公用的方法可以单独提取出来做复用: 参考:https://www.jb51.net/article/115662.htm 简单示例: 代码: const config = ...

  6. MFC如何获取控件相对于窗口的左边,以及鼠标相对于控件的位置

    CRect rect; CWnd *pWnd = GetDlgItem(IDC_STATIC_PIC); pWnd->GetWindowRect(&rect); ScreenToClie ...

  7. php代码不支持多维数组,注释和没有缓存功能。

    php代码:simplet.class.php<?phpclass SimpleT {private $t_vars;private $templates_dir;private $templa ...

  8. java中String与StringBuilder的区别

    相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵出 J2SE ...

  9. Python内置函数之isinstance,issubclass

    isinstance判断一个变量的类型 >>> n1 = 10>>> isinstance (n1,int)True 判断n1是否是数字类型,如果是返回True如果 ...

  10. ubuntu下绝对路径和相对路径的问题

     绝对路径与相对路径 除了需要特别注意的FHS目录配置外,在文件名部分我们也要特别注意.因为根据档名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relativ ...