这题在网上看到一个非常容易理解的思路,和大家分享一下。

记dp[i][j]为前i个字符删除j个字符后得到不同字符串的数量,可以得到以下两个转移方程

dp[i][j+1]=dp[i][j+1]+dp[i-1][j] (删除s[i])

dp[i][j]=dp[i][j]+dp[i-1][j] (不删除s[i])

如果只用上述式子,是会重复的。比如abcdecf,删除cde得到abcf,删除dec得到的也是abcf。

所以要删除重复计算的。从当前的i向左扫,扫到的第一个与s[i]相同的字符时处理,假设为s[k],那么dp[i][j]=dp[i][j]-dp[k-1][j-(i-k)]。

#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
#define maxn 1000005
using namespace std;
typedef long long ll;
char s[maxn];
ll dp[maxn][5];
int main()
{scanf("%s",s+1);int l=strlen(s+1);dp[0][0]=1;for(int i=0;i<=l;i++){for(int j=0;j<=3;j++){if(dp[i-1][j]==0)continue;if(j<3)dp[i][j+1]+=dp[i-1][j];dp[i][j]+=dp[i-1][j];for(int k=i-1;k>=1&&i-k<=j;k--){if(s[k]==s[i]){dp[i][j]-=dp[k-1][j-i+k];break;//如果有多个,因为是从前往后推的,所以在前面减过了
                }}}}printf("%lld\n",dp[l][0]+dp[l][1]+dp[l][2]+dp[l][3]);return 0;
}

View Code

转载于:https://www.cnblogs.com/FTA-Macro/p/10472057.html

L3-020 至多删三个字符 [DP]相关推荐

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

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

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

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

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

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

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

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

  5. PTA-至多删三个字符-(dp+容斥)

    至多删三个字符 题意: 就是给你一个字符串,然后你最多可以删掉3个字符,问你最终可以形成多少种不用的字符串. 思考: 刚开始看到其实没啥想法,要么就是暴力.但是仔细思考一下,这种题貌似没有什么偏僻的做 ...

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

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

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

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

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

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

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

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

最新文章

  1. socket的长连接与短连接
  2. Kotlin极简教程:第7章 面向对象编程
  3. tensorflow linux多卡训练_用Windows电脑训练深度学习模型?超详细配置教程来了
  4. php 星号邮箱,PHP以星号隐藏用户名手机号码和邮箱实例
  5. JavaScript 常用功能总结
  6. CSS基础常识问答(二)
  7. 市场上各种深度摄像头测试之华捷艾米A100
  8. (Java)学习笔记1---入门篇
  9. C++实现RS485通信
  10. php搜索引擎开源源码,PHP搜索引擎源代码
  11. 路由 OSPF LSA介绍、1~7类LSA详细介绍
  12. 小苹果蹿红背后的网络营销思考
  13. EventBridge 集成云服务实践
  14. 解决Windows10英文版中文字体难看、时大时小、中文比英文小等问题
  15. Android实现计时与倒计时(限时抢购)
  16. Acwing算法基础课知识点
  17. 小羊驼和你一起学习cocos2d-x与lua之四(泛型for学习)
  18. python 100以内3的倍数_关于算法:如何在Python中找到低于1000的3或5的所有倍数的总和?...
  19. “东数西算”数据中心下算力、AI智能芯片如何发展?
  20. 5G技术中的无源光器件(二)

热门文章

  1. Linux 命令之 newgrp -- 登入另一个群组
  2. display和show的区别
  3. 服务器$java_top路径_ERP实施项目-MD120_FIN000_即时打印_V1.0
  4. postgresql删除索引_PostgreSQL 13 发布,索引和查找有重大改进
  5. sql 返回日期的年月部分_公示|2020年11月部分志愿活动名单公示
  6. LeetCode 01. 两数之和
  7. 如何导出久其报表所有数据_如何选择好的HR软件
  8. python float 精度_浅谈Python里面小数点精度的控制
  9. Python3最长连续递增序列问题
  10. html的页面宽高变形问题,CSS+div 设计的网页在不同浏览器中变形的问题