题意:

长度为n的字符串S,现在要找出k个不同的子序列,使得这些序列的总价值最低
一个序列的价值等于删去的字符长度(空串也算子序列)
1≤n≤100,1≤k≤1012

题解:

一看就是dp,我们先想想串a可以有多少不同的子序列
dp[i][j]表示前i个字符构造出来的长度为j的子序列数量
转移方程不难得到:
dp[i][j]=dp[i-1][j-1]+dp[i-1][j],(也就是选第i个和不选第i个)
但是这样做是存在重复的
比如satwt,按照上面的方法,st和at就会重复出现,那么怎么才能避免?因为t是重复的,我们只需要取最近的t就行
对于j<i且aj = = ai时,前j-1个字符形成的子序列后面接aj或者ai都是一样的,那么我干脆统一一下,接最近的
我们用pre[ai-‘a’]表示该字符出现上一次出现的位置
那么转移方程就是
dp [ i ] [ j ] = d p [ i - 1 ] [ j - 1 ] + dp [ i - 1 ] [ j ] - dp [ pre [ ai - ‘a’ ] - 1 ] [ j - 1 ]
找到最近的一个满足条件的j,然后去掉前j-1的方案数(删去重复数量)

代码:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=1e4;
int pre[maxn],dp[maxn][maxn],ans;
string a;
int main()
{int n,k;cin>>n>>k>>a;for(int i=0;i<=n;i++){dp[i][0]=1;//空串 }for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){dp[i][j]+=dp[i-1][j-1]+dp[i-1][j];if(pre[a[i-1]-'a'])dp[i][j]-=dp[pre[a[i-1]-'a']-1][j-1];//   if(dp[i][j]>k)dp[i][j]=k;}pre[a[i-1]-'a']=i;} for(int i=n;i>=0;i--){int x=min(k,dp[n][i]);k-=x;//价值ans+=x*(n-i); }if(k)cout<<-1;else cout<<ans;
}
/*
a
ad
af*/

CF1183H Subsequences (hard version)相关推荐

  1. Subsequences (easy version)

    https://codeforces.com/contest/1183/problem/E 题解:朴素 /* *@Author: STZG *@Language: C++ */ #include &l ...

  2. Codeforces Round #602 (Div. 2) D2. Optimal Subsequences stl 黑科技

    传送门 文章目录 题意: 思路: 题意: 思路: 比较明显的是我们需要将序列从大到小排序,让后取前kkk个数,再从中选择第pospospos小的位置输出当前位置的数即可. 一开始想用setsetset ...

  3. szu cf套题训练Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)A~D题解报告

    A. Math Problem 题目大意:就是给你n个线段,你自己再添加一个线段d使得d和所有的线段都有交点,求d这个线段的最小长度是多少 解题思路: 1.首先看d线段的左端点,就是左端点选取的是所有 ...

  4. CF Technocup 2020 - Elimination Round 3

    A A math problem 题目描述 Your math teacher gave you the following problem: There are n segments on the ...

  5. Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow pip命令...

    引言: Tensorflow大名鼎鼎,这里不再赘述其为何物.这里讲描述在安装python包的时候碰到的"No matching distribution found for tensorfl ...

  6. Android Build.VERSION.SDK_INT

    Build.VERSION.SDK_INT   代表的操作系统的版本号 ,谷歌的解释大致翻译如下 当前在此硬件上运行的软件的SDK版本装置.当设备启动时,此值从不更改,但它可能当硬件制造商提供OTA更 ...

  7. This version of Android Studio cannot open this project, please retry with Android Studio 3.5 or new

    今天github 下载一个库 导入 as 提示 This version of Android Studio cannot open this project, please retry with A ...

  8. No cached version of com.android.tools.build:gradle:2.0.0 available for offline mode.

    异常场景 从AS2.0升级到2.1,重新编译工程后,抛出了如下异常 Error:A problem occurred configuring root project 'AndroidStudioPr ...

  9. Error:Could not download guava.jar (com.google.guava:guava:19.0): No cached version available for of

    今天从git导入demo 报错 Error:Could not download guava.jar (com.google.guava:guava:19.0): No cached version ...

最新文章

  1. Usb-type-C端口实现的挑战与设计方案
  2. GAN的理解与TF的实现
  3. 其实,人的核心职场时间是有限的,一定要和高手玩
  4. [转帖] mysql 用户 权限 密码等操作记录
  5. 江小白包装设计原型_雪碧和江小白的品牌跨界合作之旅可谓是一场品牌包装的视觉盛宴...
  6. 截取字符串,计算字符串字节大小,选择文件夹,上传文件
  7. KEYCODE_DPAD_CENTER 和 KEYCODE_ENTER
  8. 短视频聚合直播app源码/软件系统开发方案
  9. 【小程序】前端微信授权登录
  10. cdr安装一直卡在初始界面_win10关掉防火墙,cdr卡在用户界面初始化
  11. 【方向盘】蚂蚁金服上市了,我不想努力了
  12. 虚拟机上装oracle,cmd窗口输入法有问题,按了U,I,O,P,J,K,L,M这些键为什么不是UIOPJK
  13. HBase中MemStore flush的源码解析
  14. 量子能--下一代能源革命
  15. 前端笔记(03)——一文看懂flex布局
  16. MongoDB数据库的安装及使用教程
  17. ttserver B+tree参数及VS TCH
  18. 爱普生Epson LX-310 打印机驱动
  19. 基于FPGA的高速数据采集系统实现
  20. iphone已停用解锁大概多少钱_iPhone已停用怎么办 iPhone已停用解决方案汇总

热门文章

  1. 什么样的程序员会让人讨厌
  2. java 继承与多态 习题_JAVA基础 第4章继承与多态_练习题_200910
  3. 100例经典炒菜_Python3经典100例(②)
  4. android listview添加数据_Android面经分享,失业两个月,五一节前拿到offer
  5. 你连简单的枚举类都不知道,还敢说自己会Java???滚出我的公司
  6. 分布式部署_Apache Spark探秘:三种分布式部署方式比较
  7. ksu7对讲机调频软件_数字对讲机的群呼功能原理是什么?你了解多少?
  8. qint64转为qstring qt_Qt中Qstring,char,int,QByteArray之间到转换
  9. leetcode53. 最大子数组和(暴力+贪心)
  10. leetcode669. 修剪二叉搜索树