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;
}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SSDP协议的Python示例「建议收藏」

    SSDP协议的Python示例「建议收藏」废话少说,直接上代码。服务端ssdp_server.py

    2022年10月11日
  • python协程系列_python异步多线程

    python协程系列_python异步多线程协程协程(Coroutine),又称微线程,纤程。(协程是一种用户态的轻量级线程)作用:在执行A函数的时候,可以随时中断,去执行B函数,然后中断B函数,继续执行A函数(可以自动切换)

  • Linux chmod命令及权限含义

    Linux chmod命令及权限含义

    2021年10月15日
  • SSAS(3)_ssa怎么算

    SSAS(3)_ssa怎么算介绍SSAS的存储,涉及:理解分区度量组分区的变更与创建分区的存储模式与区别:MOLAP、ROLAP、HOLAP主动缓存的作用以及低延迟分区的配置  *网上看到有翻译成“预先缓存”的理解聚合部署SSAS对象;自动调度处理SSAS对象使数据最新提及数据延迟的问题,再回到ETL工具SSIS,补充一个实际应用话题:在SSIS中如何捕获上游变更数据(Change DataCap

    2022年10月29日
  • 由3个a,5个b,2个c构成的所有字符串_如何计算A且B的概率

    由3个a,5个b,2个c构成的所有字符串_如何计算A且B的概率7-3 A-B 本题要求你计算A−B。不过麻烦的是,A和B都是字符串 ——即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。输入格式: 输入在2行中先后给出字符串A和B。两字符串的长度都不超过10 ​4 ​​,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。输出格式: 在一行中打印出A−B的结果字符串。输入样例: I love …

  • matlab fir带通滤波,基于Matlab的FIR带通滤波器设计与实现

    matlab fir带通滤波,基于Matlab的FIR带通滤波器设计与实现mal”>3.2软件设计3.2.1数据组织方式若输入信号x(n)和滤波器的单位冲激响应h(n)在频域分别为,则其输出信号的频率响应为。根据离散傅氏变换的性质,可以得到滤波系统的差分方程:从上文Matlab的仿真过程可得到滤波器的级数N和滤波器系数h(n)。从上述可知数字滤波器实现时,主要是进行乘和加运算以及数据存取操作。在定点DSP上实现FIR滤波有两种方式:一种是用线性缓冲区实现z-1…

发表回复

您的电子邮箱地址不会被公开。

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