文章目录

  • 题意
  • 题解

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相关推荐

  1. CodeForces - 1303E Erase Subsequences(dp)

    题目链接:点击查看 题目大意:给出一个字符串 s 和一个字符串 t ,问 t 能否由字符串 s 中两个不重复的子序列构成 题目分析:一开始以为是贪心去写,但写了半天发现过不去第一个样例,仔细思考了半天 ...

  2. Codeforces 919D Substring (拓扑图DP)

    Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...

  3. CodeForces 1096D(线性dp)

    传送门 •题意 给出一个长度为n的字符串s,对于每个$s_{i}$有$a_{i}$的价值 让你删除最小的价值,使得字符串中不存在$hard$这个子序列 •思路 设dp[1]是不存在以$h$为前缀的最小 ...

  4. [CodeForces 332B]Maximum Absurdity[DP]

    题目链接: [CodeForces 332B]Maximum Absurdity[DP] 题意分析: 寻找两个不重叠的长度为k的子串,使得它们之和最大. 解题思路: 第一想法是,处理出从这个点开始,长 ...

  5. 【CodeForces 1042B --- Vitamins】DP+位运算

    [CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...

  6. CodeForces - 1426F Number of Subsequences(dp)

    题目链接:点击查看 题目大意:给出一个长度为 n 的字符串,由 ' a ' , ' b ' , ' c ' 和 ' ? ' 组成,每一个 ' ? ' 都可以变成三个字母之一,这样的话假设有 k 个 ' ...

  7. Codeforces 1322D Reality Show (DP)

    题目链接 https://codeforces.com/contest/1322/problem/D 题面写得非常模糊,很容易读错题,建议参考翻译:https://www.luogu.com.cn/p ...

  8. CodeForces - 1484E Skyline Photo(dp+单调栈)

    题目链接:点击查看 题目大意:给出 nnn 个建筑,每个建筑有一个高度和一个美丽值,现在要求划分为数个连续的区间,使得所有区间的贡献之和最大,其中每个区间的贡献值为,区间中高度最低的建筑物的美丽值 题 ...

  9. CodeForces 711C - Coloring Trees DP

    /*http://codeforces.com/problemset/problem/711/C http://codeforces.com/blog/entry/46830官方题解:We compu ...

最新文章

  1. GTX 1080Ti + cuda8.0 + cuDNN6.0 安装及测试
  2. 数组 = 容器
  3. [云炬创业基础笔记]第七张创业团队测试7
  4. Introduce Parameter Object(引入参数对象)
  5. 布局new操作符引发的有关析构函数的探索与总结
  6. 仿iOS Segmented Control样式
  7. 关于子网的网络地址和广播地址的计算问题的方法
  8. 李一男离开华为时给属下的忠告!
  9. 动态规划:走楼梯问题——01
  10. 抖音:资本、梦想与躁动荷尔蒙裹挟的世界
  11. firefox 配置
  12. YTU 计算机网络课程设计
  13. 详解CSRF跨站点请求伪造
  14. 解决【在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend】的问题
  15. 20180507-A · Global Coffee Chains · ggplot2 usmap geom_map geom_point 地图 热图 美国地图 · R 语言数据可视化 案例 源码
  16. SSM研究生推免网站
  17. 超薄、散热、柔性 LED贴膜屏发展及产业趋势发展
  18. 基于单片机的航空发动机振动测量系统的设计-毕设课设protues仿真
  19. Transformer 最新综述介绍
  20. C#调用SAPI实现语音合成的两种方法

热门文章

  1. JPEG压缩如何工作?
  2. edge浏览器如何把网页放到桌面_win10系统设置edge浏览器快捷方式放到桌面的操作方法...
  3. C++Test基于CCS的单元测试
  4. 红帽RHEL7版本RHCE认证学习及考试经历
  5. reading 摘录一
  6. 多疗程40Hz tACS对阿尔茨海默病患者海马灌注的影响
  7. 新书上市|历经十年,这本9.2分的数学经典终于再版了!
  8. html转换成jsp格式文件
  9. 对c语言编程的感受,感受一种被“C语言编程”困惑的书(Stephen Kochan)
  10. 牛奶可乐经济学之Q12:为什么公司宁愿奖励员工一辆免费的宝马汽车,而不是等值的现金?