PTA-至多删三个字符:动态规划
https://pintia.cn/problem-sets/994805046380707840/problems/994805046946938880
大意:
给出一个字符串,每次最多可以删除3个字符,也可以不删字符,问删除字符后有多少个不同的字符串。
思路:
- 找状态: dp[i][j]表示前i个数中取走j个的不同字符串个数
- 状态转移:dp[i][j] = dp[i-1][j](不取走第i个字符)+dp[i-1][j-1](取走第i个字符),但这样会有重复情况,比如:abcdace,假设当前是取3个字符的情况,那么取cda和取dac,最后形成的字符串都是abe,所以往前找到第一个和当前字符相等的字符,进行去重。dp[i][j] -= dp[i][j-(i-k)].
- 赋初值:dp[0][0] = 1.
解释为什么是 dp[i][j] -= dp[i][j-(i-k)]:
比如:abcdce,假设第一个c下标为k,第二个字符下标为i,取3个字符,取[k,i-1]和[k+1,i]是一种情况。
而取cd已经取了两个字符了,再到[1,k-1]中取一个字符。所以是减去dp[i][j-(i-k)]。
code
#include <bits/stdc++.h>
#define ll long long
const int N = 1e6+7;
const int mod = 1e9+7;
const double eps = 1e-8;using namespace std;ll dp[N][5];//dp[i][j]表示前i个数中取走j个的不同字符串个数
char s[N];
void solve(){cin >> s+1;int n = strlen(s+1);dp[0][0] = 1;for(int i = 1; i <= n; i++){for(int j = 0; j <= 3; j++){dp[i][j] = dp[i-1][j];if(j) dp[i][j] += dp[i-1][j-1];for(int k = i-1; k >= 1 && j-(i-k) >= 0; k--){if(s[k] == s[i]){dp[i][j] -= dp[k-1][j-(i-k)];break;}}}}ll ans = 0;for(int i = 0; i <= 3; i++){ans += dp[n][i];}cout << ans << endl;
}int main(){// int t;// cin >> t;// while(t--)solve();//system("pause");return 0;
}
PTA-至多删三个字符:动态规划相关推荐
- 至多删三个字符(动态规划字符串问题)
7-14 至多删三个字符 (35 分) 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长 ...
- L3-2 至多删三个字符
L3-2 至多删三个字符 题意: 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 题解: 最不擅长dp 我们设dp[i][j]表示前i里面删除j ...
- 【CCCC】L3-020 至多删三个字符 (30分),序列dp+去重
problem L3-020 至多删三个字符 (30分) 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写 ...
- 团体程序设计天梯赛-练习集——L3-020 至多删三个字符
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...
- CCCC/PTA 2019模拟赛 L3-3 至多删三个字符
这篇博文是本蒟蒻第一次写CSDN博客. 旨在熟悉一下CSDN博客的使用方式. 写的不好,各位客官见笑了 本篇写的题是今年4月份(具体时间记不清了)的一次模拟赛的L3-3 现在是PTA的CCCC练习集中 ...
- L3-020 至多删三个字符 (30分)(动态规划)
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 10 ] 内的字 ...
- 程序设计天梯赛L3-20 至多删三个字符(dp,一生之敌)
题目 题意: 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串?(|S|<=1e6) 思路: 可以暴力水分,pta数据比较水,用set把所有删 ...
- L3-020 至多删三个字符 (30 分)-PAT 团体程序设计天梯赛 GPLT
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...
- L3-020 至多删三个字符 (30 分) DP
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...
- 至多删三个字符 (35分)
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字 ...
最新文章
- 史上更全面的数据库分库分表、数据一致性、主键分配思路!
- Pandas把dataframe中的整数数值(integer)转化为时间(日期、时间)信息实战
- mysql创建临时表 分页_ASP+MySQl利用临时表分页第一页数据正常,下一页往后没有数据...
- 合成孔径雷达技术——概述
- mybatis学习3之分页的实现
- mysql的存储过程原理_mysql存储过程原理与用法详解
- Kettle使用_23 Excel表格输入ODS POI
- loading initial ramdisk 卡住_驿站晨读 | 一城市多家快递“卡住了”!有快递网点直接建议:换别家吧......
- 在线登记系统代码 php_PHP框架实现WebSocket在线聊天通讯系统
- 安卓案例:Okhttp3用法演示
- 高性能HTTP加速器Varnish(管理维护篇)
- 5G第一个演进版本标准完成 3GPP宣布R16标准冻结
- java+jdk+1.6.0+45+64_jdk1.6.0_45.tar.gz
- PAIP.vs2010打开某个FORM窗体设计视图时崩溃时
- matlab三角区域积分,关于复杂三角函数的二重积分,matlab该怎么求啊
- 好的示波器可以显示正常的方波,自己制作示波器只有正弦波
- 计算机u盘被禁用怎么办,u盘禁用了怎么恢复,u盘一启用马上就被禁用
- [Lisp] [Scheme][MacOS]Scheme语言环境搭建
- js 校验手机号码格式
- 虚拟机装ubuntu报错