至多删三个字符 (35分)
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串?
输入格式:
输入在一行中给出全部由小写英文字母组成的、长度在区间 [4, 106] 内的字符串。
输出格式:
在一行中输出至多删掉其中 3 个字符后不同字符串的个数。
输入样例:
ababcc
输出样例:
25
提示:
删掉 0 个字符得到 “ababcc”。
删掉 1 个字符得到 “babcc”, “aabcc”, “abbcc”, “abacc” 和 “ababc”。
删掉 2 个字符得到 “abcc”, “bbcc”, “bacc”, “babc”, “aacc”, “aabc”, “abbc”, “abac” 和 “abab”。
删掉 3 个字符得到 “abc”, “bcc”, “acc”, “bbc”, “bac”, “bab”, “aac”, “aab”, “abb” 和 “aba”。
参考了大佬的做法,稍微复杂一点的01背包
讨论前I的字符下删除j个字符的情况
还是分为包含第i个与不包含第i个两种情况
这里因为下面有去重操作我们假定他们都是正确的,相加就好了
然后就要去重,注意怎么去重,在j的范围内找与i相同的字符,如果找到了就会重复,(因为我们从1开始,到后面前面一定都是去完重的),在j的范围内才会出现重复现象,然后如果找到就删除它占用的次数就好了dp[i][j]-=dp[k-1][j-(i-k)];
想要删除不同的字符结果相等,只有在两个相同值构成的区间长度小于等于j的时候可以办到
#include<bits/stdc++.h>
using namespace std;
#define N 200005
char s[N];
long long dp[N][5];
int main()
{scanf("%s",s+1);int len=strlen(s+1);dp[0][0]=1;for(int i=1;i<=len;i++){for(int j=0;j<=3;j++){if(j) dp[i][j]+=dp[i-1][j-1];dp[i][j]+=dp[i-1][j];for(int k=i-1;k>0&&j>=i-k;k--){if(s[i]==s[k]){dp[i][j]-=dp[k-1][j-(i-k)];break;}}}}printf("%lld\n",dp[len][0]+dp[len][1]+dp[len][2]+dp[len][3]);return 0;
}
至多删三个字符 (35分)相关推荐
- 【CCCC】L3-020 至多删三个字符 (30分),序列dp+去重
problem L3-020 至多删三个字符 (30分) 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写 ...
- L3-020 至多删三个字符 (30 分) DP
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...
- L3-020 至多删三个字符 (30 分)-PAT 团体程序设计天梯赛 GPLT
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...
- L3-020 至多删三个字符 (30 分)
题目: 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4,106][4,1 ...
- L3-020 至多删三个字符 (30分)(动态规划)
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 10 ] 内的字 ...
- L3-020 至多删三个字符 (30 分)(DP)
题目链接 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 10^6 ...
- 至多删三个字符(动态规划字符串问题)
7-14 至多删三个字符 (35 分) 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长 ...
- 团体程序设计天梯赛-练习集——L3-020 至多删三个字符
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 106] 内的字符串. ...
- L3-2 至多删三个字符
L3-2 至多删三个字符 题意: 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 题解: 最不擅长dp 我们设dp[i][j]表示前i里面删除j ...
最新文章
- 数据解析1:XML解析(2)
- 确保字符串的每个单词首字母都大写,其余部分小写
- sass和less的优缺点
- Java设计模式之行为型:备忘录模式
- QFile练习(20200213)
- PHP 单一入口程序
- html性别选项卡,html选项卡
- self php语法,PHP代码审计之关于PHP_SELF的简单利用
- AI来袭程序猿是否该学习Python了
- Qgis3.2编译移植成功文档完整版
- LAMP的部署(一)
- Ajax无刷新实现省市联动,并在回发后保留省市下拉框状态
- C# 最简单的异步委托
- 计算机语言疾病矫治操作流程,言语矫治专家决策系统的构建.doc
- linux tuxedo查看服务进程数,Tuxedo 运行监控命令
- Android CameraX适配Android11的踩坑之路
- 加工生产调度(贪心)
- Bugzilla的使用
- MySQL基础(附练习题+答案)
- jvm 年轻代、年老代、永久代