Codeforces 1183E/H Subsequences dp
文章目录
- 题意
- 题解
div.3真是优秀dp层出的场次.
题意
给一个字符串,令一个子序列的价值为原字符串变成该子序列去掉字母的个数,求选择kkk个各不相同的子序列所得价值的最小值.不能选择kkk个各不相同的子序列则输出−1-1−1.
题解
显然从贪心考虑我们应当尽量选择较长的子序列.这给我们一个dpdpdp思路即为对每一个i∈[1,n]i\in[1,n]i∈[1,n]求得长度为iii各不相同子序列的个数.
令dpi,jdp_{i,j}dpi,j表示前iii个字母中长度为jjj的各不相同的子序列个数.
倘若字母没有重复,则答案即为CijC_i^jCij,可以运用杨辉三角进行处理,dp[i][j]=dp[i−1][j−1]+dp[i−1][j]dp[i][j]=dp[i-1][j-1]+dp[i-1][j]dp[i][j]=dp[i−1][j−1]+dp[i−1][j].
但现在有重复字母,那么假设第iii位的字符上次出现的位置为preipre_iprei,则还需要减掉重复出现的部分dp[pre[i]−1][j−1]dp[pre[i]-1][j-1]dp[pre[i]−1][j−1].
这样dpn,idp_{n,i}dpn,i即为长度为iii子序列的个数.
那么从i=ni=ni=n开始贪心取kkk个子序列即可.
const int yuzu=2e5;
typedef int fuko[yuzu|10];
ll dp[150][150]={1},pre[150];
char c[150];
int main() {ll n,k,i,j,zw=0;read(n),read(k);scanf("%s",c+1);for (i=1;i<=n;++i) {for (j=0;j<=i;++j) {dp[i][j]=j?dp[i-1][j-1]+dp[i-1][j]:1;if (j&&pre[c[i]]) dp[i][j]-=dp[pre[c[i]]-1][j-1];} pre[c[i]]=i;}for (i=n;~i&&k;--i) zw+=min(dp[n][i],k)*(n-i),k-=min(dp[n][i],k);printf("%lld\n",k?-1:zw);
}
Codeforces 1183E/H Subsequences dp相关推荐
- CodeForces - 1303E Erase Subsequences(dp)
题目链接:点击查看 题目大意:给出一个字符串 s 和一个字符串 t ,问 t 能否由字符串 s 中两个不重复的子序列构成 题目分析:一开始以为是贪心去写,但写了半天发现过不去第一个样例,仔细思考了半天 ...
- Codeforces 919D Substring (拓扑图DP)
Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...
- CodeForces 1096D(线性dp)
传送门 •题意 给出一个长度为n的字符串s,对于每个$s_{i}$有$a_{i}$的价值 让你删除最小的价值,使得字符串中不存在$hard$这个子序列 •思路 设dp[1]是不存在以$h$为前缀的最小 ...
- [CodeForces 332B]Maximum Absurdity[DP]
题目链接: [CodeForces 332B]Maximum Absurdity[DP] 题意分析: 寻找两个不重叠的长度为k的子串,使得它们之和最大. 解题思路: 第一想法是,处理出从这个点开始,长 ...
- 【CodeForces 1042B --- Vitamins】DP+位运算
[CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...
- CodeForces - 1426F Number of Subsequences(dp)
题目链接:点击查看 题目大意:给出一个长度为 n 的字符串,由 ' a ' , ' b ' , ' c ' 和 ' ? ' 组成,每一个 ' ? ' 都可以变成三个字母之一,这样的话假设有 k 个 ' ...
- Codeforces 1322D Reality Show (DP)
题目链接 https://codeforces.com/contest/1322/problem/D 题面写得非常模糊,很容易读错题,建议参考翻译:https://www.luogu.com.cn/p ...
- CodeForces - 1484E Skyline Photo(dp+单调栈)
题目链接:点击查看 题目大意:给出 nnn 个建筑,每个建筑有一个高度和一个美丽值,现在要求划分为数个连续的区间,使得所有区间的贡献之和最大,其中每个区间的贡献值为,区间中高度最低的建筑物的美丽值 题 ...
- CodeForces 711C - Coloring Trees DP
/*http://codeforces.com/problemset/problem/711/C http://codeforces.com/blog/entry/46830官方题解:We compu ...
最新文章
- GTX 1080Ti + cuda8.0 + cuDNN6.0 安装及测试
- 数组 = 容器
- [云炬创业基础笔记]第七张创业团队测试7
- Introduce Parameter Object(引入参数对象)
- 布局new操作符引发的有关析构函数的探索与总结
- 仿iOS Segmented Control样式
- 关于子网的网络地址和广播地址的计算问题的方法
- 李一男离开华为时给属下的忠告!
- 动态规划:走楼梯问题——01
- 抖音:资本、梦想与躁动荷尔蒙裹挟的世界
- firefox 配置
- YTU 计算机网络课程设计
- 详解CSRF跨站点请求伪造
- 解决【在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend】的问题
- 20180507-A · Global Coffee Chains · ggplot2 usmap geom_map geom_point 地图 热图 美国地图 · R 语言数据可视化 案例 源码
- SSM研究生推免网站
- 超薄、散热、柔性 LED贴膜屏发展及产业趋势发展
- 基于单片机的航空发动机振动测量系统的设计-毕设课设protues仿真
- Transformer 最新综述介绍
- C#调用SAPI实现语音合成的两种方法
热门文章
- JPEG压缩如何工作?
- edge浏览器如何把网页放到桌面_win10系统设置edge浏览器快捷方式放到桌面的操作方法...
- C++Test基于CCS的单元测试
- 红帽RHEL7版本RHCE认证学习及考试经历
- reading 摘录一
- 多疗程40Hz tACS对阿尔茨海默病患者海马灌注的影响
- 新书上市|历经十年,这本9.2分的数学经典终于再版了!
- html转换成jsp格式文件
- 对c语言编程的感受,感受一种被“C语言编程”困惑的书(Stephen Kochan)
- 牛奶可乐经济学之Q12:为什么公司宁愿奖励员工一辆免费的宝马汽车,而不是等值的现金?