PTA 团体程序设计天梯赛 L3-020 至多删三个字符
$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 至多删三个字符的更多相关文章
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
- 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛(CCCC) L3009 长城 方法证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
随机推荐
- 编译安装Ruby 1.9.3 安装CentOS
1. 准备需要的安装的东西 yum -y install make gcc openssl-devel zlib-devel gcc gcc-c++ make autoconf readline-de ...
- Android图表开发——AChartEngine
Android图表控件的开发 曾经开发过一个小程序,在Android电视机上面开发一个APP,用于显示一些统计图表的信息.最后找来找去基于Android Native开发有AChartEngine现成 ...
- 【SPOJ419】Transposing is Fun Pólya定理+欧拉函数
[SPOJ419]Transposing is Fun 题意:给你一个$2^a\times2^b$的矩阵,将$1...n$中的数依次从左到右,从上往下填到矩阵里,再把矩阵转置,然后把所有数从左到右,从 ...
- ggplot2绘制概率密度图
以下绘图以Weibull分布(韦伯分布.威布尔分布)为例 关于Weibull分布(韦伯分布.威布尔分布),请参考本人博客http://www.cnblogs.com/wwxbi/p/6141501.h ...
- Spark2 broadcast广播变量
A broadcast variable. Broadcast variables allow the programmer to keep a read-only variable cached o ...
- spring面试大全
一.spring如何实现资源管理? 使用 applicationContext.getResource(“classpath:文件名”):在src根目录下,在类路径下 applicationConte ...
- DevOps工具链
Devops工具链 DevOps实际是一种文化上的变迁,代表了开发.运维.测试等环节之间的协作,因此DevOps工具是非常多种多样的,甚至可以由多种工具组成一个完整的DevOps工具链.此类工具可以应 ...
- FZU 2092 收集水晶(记忆化搜索)
Problem 2092 收集水晶 Accept: 101 Submit: 439 Time Limit: 5000 mSec Memory Limit : 32768 KB Problem Desc ...
- VS 2005 处理条件
1. VS 设置断点; 2.VS 查找需要跟踪的内存地址,如果是指针,需要取指针存放地的地址; 3. 4.继续运行,直到内存内容被改写.
- 字符编码笔记:ASCII,Unicode和UTF-8(转载)
注:我注释的地方有 add by zhj.另Unicode.UTF-8.GB2312查询http://www.2fz1.com/so/ 在python中,a.decode(xxx)就是把str类型的字 ...