整理的算法模板:ACM算法模板总结(分类详细版)

链接:https://ac.nowcoder.com/acm/contest/4853/C
来源:牛客网

题目描述

有一款自走棋有26种操作,每种操作我们都用a,b,c,d,...,x,y,za,b,c,d,...,x,y,za,b,c,d,...,x,y,z的符号来代替.

现在牛牛有一个长度为nnn的操作序列,他现在可以从里面拿出某些操作来组合成一个操作视频, 比如说操作序列是abcdabcdabcd,那么操作视频就有a,b,c,d,ab,ac,ada,b,c,d,ab,ac,ada,b,c,d,ab,ac,ad等(也就是操作序列的子序列).他现在想知道长度为kkk且本质不同的操作视频有多少种.

比如对于abababababab,长度为222且本质不同的结果有ab,aa,ba,bbab,aa,ba,bbab,aa,ba,bb。

考虑到答案可能非常大,你只需要输出在模1e9+71e9+71e9+7意义下的答案就可以了.

输入描述:

 

第一行两个整数n,kn,kn,k.

第二行一个长度为nnn的字符串,保证只存在小写字母.

输出描述:

一行一个整数表示长度为kkk且本质不同的操作视频的个数. 

示例1

输入

3 1
abc

输出

3

思路:DP

状态属性以及注意方程代码中已经注明;关键是去重;

假设一个字符串组成为    sa.....b  (s为一个串,a,b是字符);字符 a 可以和 s 中的任何序列构成新的序列,同理b也可以,如果a和b相同,那么两者和s构成的序列就相同,那么就要减去一个,就意味着前面的a不能和s构成新的序列;那么就是减去

f(i-1,j-1)   (i为a的位置下标)

//  状态表示:集合:f(i,j)表示前i个字符中长度为j的不同的序列个数
//            属性:SUM;
//  状态计算:f(i,j)=f(i-1,j)+f(i-1,j-1);
//            考虑去重 f(i,j)-=f(pre[s[i]]-1,j-1);
#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
typedef long long ll;
ll dp[1005][1005];
int pre[30];
char s[1005];
int main()
{int n,k;cin >>n>>k;for(int i=1;i<=n;i++) cin >>s[i]; dp[0][0]=1;for(int i=1;i<=n;i++){dp[i][0]=1;for(int j=1;j<=i;j++){dp[i][j]=(dp[i-1][j]+dp[i-1][j-1]+mod)%mod;if(pre[s[i]-'a']) dp[i][j]-=dp[pre[s[i]-'a']-1][j-1];}pre[s[i]-'a']=i;}cout <<(dp[n][k]+mod)%mod<<endl;
}

牛客练习赛60 C—操作集锦相关推荐

  1. 牛客练习赛 60(待补E-长链剖分或者dsu)

    A.大吉大利 位运算有独立性,按位计算对答案的贡献即可. #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GC ...

  2. 操作集锦【牛客网】 牛客练习赛60

    题目传送 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一款自走棋有26种操作,每种操 ...

  3. 牛客练习赛60 ~ 斩杀线计算大师

    题目传送 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge, 64bit IO Format: %lld 题目描述 算 ...

  4. 牛客练习赛60 D斩杀线计算大师

    链接 点击跳转 题解 出题人的做法被hack了,不过幸亏他写了spj,数据可以保证是对的 这题的同余最短路做法是对的,而且还挺裸 关于同于最短路看这里 代码 #include <bits/std ...

  5. 大吉大利【牛客网】(牛客练习赛60)

    传送 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format:%lld 题目描述 输入描述: 第一行一个整数n. 第二行 ...

  6. 妄想集合(牛客练习赛90)

    妄想集合(牛客练习赛90) 题意: 开始有 n 个可重集合,开始时每一个集合中都有一个数,有 m 个操作. Quant l r x\text{Quant l r x}Quant l r x:往编号在 ...

  7. 牛客练习赛75 D 减数游戏(队列优化(需要取模的)堆)

    牛客练习赛75 D 减数游戏 思路:写一下式子可以发每次选择最小的两个数进行操作,最后得到的答案会是最大的,那我们可以将它放进一个最小堆中来维护,但是里面的数是需要取模的,当它取模的时候,将会变小.那 ...

  8. 踩不出足迹(牛客练习赛88 )

    踩不出足迹(牛客练习赛88 ) 题意: 长度为n的数组a,每个数是一个k位二进制 定义一下操作: 令第一次得到的结果为 a1a_1a1​.你需要从第二个数开始,每次可以选择与上一次得到的结果异或或者同 ...

  9. 牛客练习赛29 题解

    牛客练习赛29 A. 可持久化动态图上树状数组维护01背包 题解 这题跟标题没有任何关系- 贪心的使得负数删除的时候下标尽可能大,然后正数的时候下标尽可能小. 观察到每个数下标最大的时候就是它的初始下 ...

最新文章

  1. Apache Hadoop YARN – ResourceManager--转载
  2. Coursera吴恩达《神经网络与深度学习》课程笔记(2)-- 神经网络基础之逻辑回归
  3. Linux Shell脚本入门教程系列之(一)Shell简介
  4. vscode写python爬虫_如何在vscode中调试python scrapy爬虫
  5. python 表格格式输出_Python笔记---DAY3:格式化输出、for循环、列表操作
  6. ajax ★ ★ ★ ★ ★
  7. openerp mysql_Odoo字段(Fields)总结-至2020全
  8. 管理数据库计算机网络,计算机网络与数据库管理系统.pdf
  9. Centos VMware 克隆后 网络配置
  10. Google拒绝因搜索不良信息被传唤
  11. 怎样把一个字典的数据添加到另一个字典中?
  12. JavaScript学习笔记 1
  13. 【代码笔记】RRDNet 网络
  14. 移动领先100笔试面试经验
  15. preparedStatement介绍
  16. R语言将dataframe数据中指定数据列的数据从小数转化为百分比表示、数据转换为百分数
  17. 手机卫星定位系统_手机一键“连接”北斗卫星导航?这一设置打开:立马连接,很简单...
  18. manjaro配置输入法
  19. modbus通讯协议详解
  20. CentOS 7安装并启动Google浏览器

热门文章

  1. 前后台订单入库调用流程
  2. 武侠世界。。。。。。。。。
  3. 基于验证分离的PLC保护系统
  4. WPF实现仿Glitch闪烁特效
  5. 怎么知道本台计算机的用户名和密码,访问其它电脑时“开始-运行-\输入要连接的电脑的IP,用户名和密码输入什么?...
  6. 关于升级win10 右键卡顿的解决方法
  7. 归并排序及其优化(数组归并/链表归并,自顶向下/自底向上等)
  8. Eclipse Maven 依赖包找不到源代码及javadoc
  9. 【SemiDrive源码分析】【X9芯片启动流程】12 - freertos_safetyos目录Cortex-R5 DIL2.bin 之 sdm_display_init 显示初始化源码分析
  10. vue的两个核心点分别是什么?