Codeforces 360C Levko and Strings dp

Codeforces 360C Levko and Strings dp

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

题目链接:点击打开链接

题意:

给定长度为n的字符串s,常数k

显然s的子串一共同拥有 n(n-1)/2 个

要求找到一个长度为n的字符串t,使得t相应位置的k个子串字典序>s

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;
#define N 2505
#define mod 1000000007
#define ll __int64
ll n,k;
ll dp[N][N];//dp[i][j]表示i位置产生的j对(1-i-1都是同样的)
char s[N];
ll num[N], sum[N];
ll work(){
	if(k==0)return num[1];
	dp[0][0] = 1;
	sum[0] = 1;
	ll ans = 0;
	for(ll i = 1; i <= n; i++){
		ll len = n-i+1;
		for(ll j = 0; j <= k; j++) {
			for(ll z = i-1; z>=0 && (i-z)*len<=j; z--) {
				dp[i][j] = (dp[i][j]+dp[z][j-(i-z)*len])%mod;
			}
			dp[i][j] = dp[i][j]*('z'-s[i])%mod;
		}
		ans = (ans+dp[i][k]*num[i+1]%mod)%mod;
		for(ll j = 0; j <= k; j++) {
			dp[i][j] = (dp[i][j]+sum[j]*(s[i]-'a')%mod)%mod;
			sum[j] = (sum[j]+dp[i][j])%mod;
		}
	}
	return ans;
}
int main(){
	ll i;
	while(cin>>n>>k){
		cin>>s+1;
		num[n+1] = 1;
		for(i=n;i;i--)num[i] = num[i+1]*(s[i]-'a'+1)%mod;
		cout<<work()<<endl;
	}
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118439.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言符号意思(看了必懂系列)「建议收藏」

    C语言符号意思(看了必懂系列)「建议收藏」所有的努力都不会完全白费,你付出多少时间和精力,都是在对未来的积累。世界上什么都不公平,唯独时间最公平,你是懒惰还是努力,时间都会给出结果。auto:声明自动变量一般不使用double:声明双精度变量或函数int:声明整型变量或函数struct:声明结构体变量或函数break:跳出当前循环else:条件语句否定分支(与if连用)long:声明长整型变量或函数swit…

    2022年5月19日
  • python 变量锁_python字符串前面加b

    python 变量锁_python字符串前面加b一、全局解释器锁(GIL)1、什么是全局解释器锁在同一个进程中只要有一个线程获取了全局解释器(cpu)的使用权限,那么其他的线程就必须等待该线程的全局解释器(cpu)使用权消失后才能使用全局解释器(cpu),即时多个线程直接不会相互影响在同一个进程下也只有一个线程使用cpu,这样的机制称为全局解释器锁(GIL)。2、全局解释器锁的好处1、避免了大量的加锁解锁的好处2、使数据更加安全,解决多线程间的…

    2022年9月6日
  • jquery定时执行函数_jquery自动提交

    jquery定时执行函数_jquery自动提交setTimeout用于延时器,只执行一次.setInterval:用于多次执行.functiongetnums(){$.get(“http://special.ku6.com/office2010/api/nums.php?”+Math.random(),function(data){nums=”;$.each(data,f

    2022年9月12日
  • linux安装mysql5.7.24

    linux安装mysql5.7.24linux安装mysql5.7.24一、卸载mysql安装有三种方式,包括二进制包安装(UsingGenericBinaries)、RPM包安装、源码安装。一般是前两种比较多卸载方法参考Linux->卸载Mysql方法总结,记得卸载干净二、安装建议路径设置按照写的来将下载的压缩包复制到linux服务器/usr/local/路径下(下载地址https://de…

    2022年5月9日
  • mirna预测靶基因结果怎么看_基因预测

    mirna预测靶基因结果怎么看_基因预测上一篇《动物miRNA靶基因预测方法(一)——软件安装》介绍了4种靶基因预测软件的下载与安装,本篇则介绍每个软件的使用说明。事实上,软件的使用是很简单的,只要准备好miRNA和mRNA的序列数据,运行一两条命令就可获得预测结果,难就难在数据的准备,往往你的数据并符合软件运行的格式,所以这里会更多的介绍如何获得各软件的数据格式。1、miRanda的使用阅读说明文档README这里提取一…

    2022年10月26日
  • 阿里云centos镜像下载

    阿里云centos镜像下载下载地址:http://mirrors.aliyun.com/centos/这个界面提供了centos各个版本的目录,不过,点入具体的目录去只有一个readme文件,而没有镜像下载。readme文件中提供了精确版本的下载地址:http://vault.centos.org/,以6.8版本为例,可以根据信息一步一步找到需要的镜像文件这个地址是可以下载的,不过下载速度相对比较慢,针对网络比较差的环境,下载这个镜像简直就是折磨。回到最开始的阿里云镜像目录,点击7和8的根目录可以找到相关的镜像通过目录iso

    2022年6月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号