题目:https://vjudge.net/contest/325352#problem/C

题意:输入n,m,给你一个长度为n的串,然后你有一个集合,集合里面都是你的子序列,集合里面不能重复,集合中元素的花费是 n-当前元素长度 ,也就是删除了几个字符,然后要你求前m个最小花费是多少

思路:我们考虑dp,dp[i][j] 前i个字符删除j个字符的方案数,我们先假设没有重复字符,没有的话,很明显转移方程就是dp[i][j]=dp[i-1][j-1]+dp[i-1][j]

也就是考虑   当前字符删+当前字符不删  ,但是如果有重复的字符我们怎么处理呢,如果abcda,我们遇到第一个a,后面再遇到 第二个a时,我们可以删掉

abcd和 bcda 结果都是a,我们怎么处理呢,发现我们想得到相同的串,我们肯定要把两个字符之间的位置字符全删了,然后再删其中一边,所有我们可以考虑先把中间删掉,然后把重复那一部分,也就是前一个出现位置的串数删掉即可,最后我们再从删掉字符数从低到高枚举即可

#include<bits/stdc++.h>
#define maxn 100005
#define mod 1000000007
using namespace std;
typedef long long ll;
ll n,m,dp[][];
char str[maxn];
int main(){
scanf("%lld%lld",&n,&m);
scanf("%s",str+);
dp[][]=;
for(int i=;i<=n;i++){
dp[i][]=;
for(int j=;j<=i;j++){
dp[i][j]=dp[i-][j-]+dp[i-][j];
for(int k=i-;k>=&&(i-k)<=j;k--){
if(str[i]==str[k]){
dp[i][j]-=dp[k-][j-(i-k)];
break;
}
}
}
}
ll sum=;
for(int i=;i<=n;i++){
if(m>=dp[n][i]){
sum+=i*dp[n][i];
m-=dp[n][i];
}
else{
sum+=i*m;
m=;
break;
}
}
if(m>) cout<<"-1";
else cout<<sum;
}

CodeForces - 1183H Subsequences (hard version) (DP)的更多相关文章

  1. CodeForces - 710E Generate a String (dp)

    题意:构造一个由a组成的串,如果插入或删除一个a,花费时间x,如果使当前串长度加倍,花费时间y,问要构造一个长度为n的串,最少花费多长时间. 分析:dp[i]---构造长度为i的串需要花费的最短时间. ...

  2. CodeForces - 1183E Subsequences (easy version) (字符串bfs)

    The only difference between the easy and the hard versions is constraints. A subsequence is a string ...

  3. Codeforces 1077F1 Pictures with Kittens (easy version)(DP)

    题目链接:Pictures with Kittens (easy version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:$dp[i][j ...

  4. Codeforces 1542E2 - Abnormal Permutation Pairs (hard version)(DP)

    upd on 2021.7.7:修了个 typo Codeforces 题目传送门 & 洛谷题目传送门 首先考虑怎样处理"字典序小"这个问题,按照字典序比大小的套路,我们可 ...

  5. Educational Codeforces Round 51 D. Bicolorings(dp)

    https://codeforces.com/contest/1051/problem/D 题意 一个2*n的矩阵,你可以用黑白格子去填充他,求联通块数目等于k的方案数,答案%998244353. 思 ...

  6. Codeforces 536D - Tavas in Kansas(dp)

    Codeforces 题目传送门 & 洛谷题目传送门 其实这题本该 2019 年 12 月就 AC 的(详情请见 ycx 发此题题解的时间),然鹅鸽到了现在-- 首先以 \(s,t\) 分别为 ...

  7. 第十六届浙江大学宁波理工学院程序设计大赛 D 雷顿女士与分队hard version(dp)

    题意 链接:https://ac.nowcoder.com/acm/contest/2995/D来源:牛客网 卡特莉接到来自某程序设计竞赛集训队的邀请,来为他们进行分队规划. 现在集训队共有n名选手, ...

  8. Codeforces 295D - Greg and Caves(dp)

    题意: 给出一个 \(n \times m\) 的矩阵,需对其进行黑白染色,使得以下条件成立: 存在区间 \([l,r]\)(\(1\leq l\leq r\leq n\)),使得第 \(l,l+1, ...

  9. Codeforces 467C George and Job(DP)

    题目 Source http://codeforces.com/contest/467/problem/C Description The new ITone 6 has been released ...

随机推荐

  1. dataframe指定位置插入行

    1 loc( ) 函数可以定位行后,并直接赋值插入. 如下可见loc函数对直接改变原来行的值 df = pd.DataFrame({ '动物' : ['狗','猫','兔'], '数量' : [ 3, ...

  2. 获取当前进程当前runtime加载的appdomain

    using System.Runtime.InteropServices; // Add the following as a COM reference - C:\WINDOWS\Microsoft ...

  3. 浅谈矩阵加速——以时间复杂度为O(log n)的算法实现裴波那契数列第n项及前n之和使用矩阵加速法的优化求法

    首先请连矩阵乘法乘法都还没有了解的同学简单看一下这篇博客: https://blog.csdn.net/weixin_44049566/article/details/88945949 首先直接暴力求 ...

  4. SpringBoot中FreeMarker创建

    1.创建SpringBoot项目时,勾选freemarker依赖(web,dev) 2.Controller中向model中存放数据 package com.ziv.springbootbygrald ...

  5. vue打包详情

    说明 本文代码中的配置基于vue-cli2 需求 在实际开发中我们可能有测试环境一套请求API 和 正式环境一套API,尤其是两个环境的域名不同时,就需要我们分环境打不同配置的包 了解 webpack ...

  6. 今天起,重新开头学习Java - 一、安装环境

    先拜领路人 https://blog.csdn.net/u011541946/article/category/6951961/3? 一.安装JDK 1. 下载 www.java.com JDK是Ja ...

  7. 浏览器输入url按回车背后经历了哪些?

    在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事? 1.首先,在浏览器地址栏中输入url,先解析url,检测url地址是否合法2.浏览器先查看浏览器缓存 ...

  8. 山区建小学(区间dp+前缀和+预处理)

    [题目描述] 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i ...

  9. 《Cascaded Pyramid Network for Multi-Person Pose Estimation》论文阅读及复现笔记

    一.PipeLine 要点 TopDown + GlobalNet + RefineNet 二.Motivation 通过提高对难以识别的关键点的识别准确率,来提升总体识别准确率. 方法:1.refi ...

  10. 固定标签(position: fixed)

    document.body.scrollTop 要改成 document.documentElement.scrollTop不然不生效 <!DOCTYPE html> <html l ...