https://pintia.cn/problem-sets/994805046380707840/problems/994805046946938880

大意:

给出一个字符串,每次最多可以删除3个字符,也可以不删字符,问删除字符后有多少个不同的字符串。

思路:

  1. 找状态: dp[i][j]表示前i个数中取走j个的不同字符串个数
  2. 状态转移: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)].
  3. 赋初值: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-至多删三个字符:动态规划相关推荐

  1. 至多删三个字符(动态规划字符串问题)

    7-14 至多删三个字符 (35 分) 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长 ...

  2. L3-2 至多删三个字符

    L3-2 至多删三个字符 题意: 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 题解: 最不擅长dp 我们设dp[i][j]表示前i里面删除j ...

  3. 【CCCC】L3-020 至多删三个字符 (30分),序列dp+去重

    problem L3-020 至多删三个字符 (30分) 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写 ...

  4. 团体程序设计天梯赛-练习集——L3-020 至多删三个字符

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...

  5. CCCC/PTA 2019模拟赛 L3-3 至多删三个字符

    这篇博文是本蒟蒻第一次写CSDN博客. 旨在熟悉一下CSDN博客的使用方式. 写的不好,各位客官见笑了 本篇写的题是今年4月份(具体时间记不清了)的一次模拟赛的L3-3 现在是PTA的CCCC练习集中 ...

  6. L3-020 至多删三个字符 (30分)(动态规划)

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 10​​​ ] 内的字 ...

  7. 程序设计天梯赛L3-20 至多删三个字符(dp,一生之敌)

    题目 题意: 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串?(|S|<=1e6) 思路: 可以暴力水分,pta数据比较水,用set把所有删 ...

  8. L3-020 至多删三个字符 (30 分)-PAT 团体程序设计天梯赛 GPLT

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...

  9. L3-020 至多删三个字符 (30 分) DP

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...

  10. 至多删三个字符 (35分)

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 10​6​​] 内的字 ...

最新文章

  1. 史上更全面的数据库分库分表、数据一致性、主键分配思路!
  2. Pandas把dataframe中的整数数值(integer)转化为时间(日期、时间)信息实战
  3. mysql创建临时表 分页_ASP+MySQl利用临时表分页第一页数据正常,下一页往后没有数据...
  4. 合成孔径雷达技术——概述
  5. mybatis学习3之分页的实现
  6. mysql的存储过程原理_mysql存储过程原理与用法详解
  7. Kettle使用_23 Excel表格输入ODS POI
  8. loading initial ramdisk 卡住_驿站晨读 | 一城市多家快递“卡住了”!有快递网点直接建议:换别家吧......
  9. 在线登记系统代码 php_PHP框架实现WebSocket在线聊天通讯系统
  10. 安卓案例:Okhttp3用法演示
  11. 高性能HTTP加速器Varnish(管理维护篇)
  12. 5G第一个演进版本标准完成 3GPP宣布R16标准冻结
  13. java+jdk+1.6.0+45+64_jdk1.6.0_45.tar.gz
  14. PAIP.vs2010打开某个FORM窗体设计视图时崩溃时
  15. matlab三角区域积分,关于复杂三角函数的二重积分,matlab该怎么求啊
  16. 好的示波器可以显示正常的方波,自己制作示波器只有正弦波
  17. 计算机u盘被禁用怎么办,u盘禁用了怎么恢复,u盘一启用马上就被禁用
  18. [Lisp] [Scheme][MacOS]Scheme语言环境搭建
  19. js 校验手机号码格式
  20. 虚拟机装ubuntu报错

热门文章

  1. 基于依存句法分析的实体关系提取
  2. 计算机不显示固态硬盘,新装的固态硬盘不显示怎么办?
  3. 2017年南海区青少年信息学奥林匹克竞赛(小学甲组)
  4. Windows自定义右键菜单
  5. 为什么要配置Java环境变量以及Java环境变量的配置
  6. [935]python解析xml文件
  7. Deep-Residual-Shrinkage-Networks模型
  8. 深度学习——损失函数(Regression Loss、Classification Loss)
  9. excel2010设置列宽为像素_Excel2010中调整行高和列宽的方法
  10. ADXL345知识学习总结