题目链接:点击打开链接

题意:

给定长度为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;
}

Codeforces 360C Levko and Strings dp的更多相关文章

  1. Codeforces 482C Game with Strings(dp+概率)

    题目链接:Codeforces 482C Game with Strings 题目大意:给定N个字符串,如今从中选定一个字符串为答案串,你不知道答案串是哪个.可是能够通过询问来确定, 每次询问一个位置 ...

  2. CodeForces - 361E Levko and Strings

    Discription Levko loves strings of length n, consisting of lowercase English letters, very much. He ...

  3. Codeforces 385B Bear and Strings

    题目链接:Codeforces 385B Bear and Strings 记录下每一个bear的起始位置和终止位置,然后扫一遍记录下来的结构体数组,过程中用一个变量记录上一个扫过的位置,用来去重. ...

  4. [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)

    [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...

  5. Codeforces Round #358 (Div. 2) D. Alyona and Strings dp

    D. Alyona and Strings 题目连接: http://www.codeforces.com/contest/682/problem/D Description After return ...

  6. Codeforces Round #272 (Div. 2) E. Dreamoon and Strings dp

    题目链接: http://www.codeforces.com/contest/476/problem/E E. Dreamoon and Strings time limit per test 1 ...

  7. Codeforces 682 D. Alyona and Strings (dp)

    题目链接:http://codeforces.com/contest/682/problem/D 给你两个字符串,求两个字符串中顺序k个的相同子串 长度之和.(注意是子串) dp[i][j][k][0 ...

  8. CodeForces 682D Alyona and Strings (四维DP)

    Alyona and Strings 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/D Description After re ...

  9. Codeforces 354B dp Game with Strings dp

    Game with Strings 题意并不是在图上走,看了好久才看出来.. dp[ i ][ mask ]表示从 i 层开始走,起点有mask个, a的个数-b的个数的  最大值或者最小值. #in ...

随机推荐

  1. 关于php支持的协议与封装协议

    <?php /* * php://stdin 标准输入流 * php://stdout 标准输入流 * php://stderr 标准错误流 * php://output 只写的数据流 * ph ...

  2. HDU2008-数值统计

    描述: 统计给定的n个实数中,负数.零和正数的个数. 代码: #include<stdio.h> #include<string.h> #include<iostream ...

  3. JS中的内存泄漏

    明天下午面试微店的前端开发职位,有点紧张~~ 刚刚正好看到js中的内存泄露,所以来整理一番. 给DOM对象添加的属性是对一个js对象的引用. var MyObject = {}; document.g ...

  4. Python主要模块和常用方法简览

    原文地址:http://blog.csdn.net/hwhjava/article/details/22284399 PY核心模块方法1. os模块: os.remove() #删除文件 os.unl ...

  5. 【转】使用Boost Graph library(二)

    原文转自:http://shanzhizi.blog.51cto.com/5066308/942972 让我们从一个新的图的开始,定义一些属性,然后加入一些带属性的顶点和边.我们将给出所有的代码,这样 ...

  6. 磁珠在PCB中的应用

    1.磁珠的单位是欧姆,而不是亨特,这一点要特别注意.因为磁珠的单位是按照它在某一频率产生的阻抗来标称的,阻抗的单位也是欧姆.磁珠的 DATASHEET上一般会提供频率和阻抗的特性曲线图,一般以100M ...

  7. 面试题:对一个正整数n,算得到1需要的最少操作次数

    实现一个函数,对一个正整数n,算得到1需要的最少操作次数.操作规则为:如果n为偶数,将其除以2:如果n为奇数,可以加1或减1:一直处理下去.例子:func(7) = 4,可以证明最少需要4次运算n = ...

  8. 使用Boost.Asio编写通信程序

    摘要:本文通过形像而活泼的语言简单地介绍了Boost::asio库的使用,作为asio的一个入门介绍是非常合适的,可以给人一种新鲜的感觉,同时也能让体验到asio的主要内容. Boost.Asio是一 ...

  9. 深入分析MySQL ERROR 1045 (28000)

    这几天在MySQL新建用户后.出现訪问拒绝的问题,错误码为ERROR 1045(28000).在网上搜索了非常久.找到了非常多解决的方法,但非常遗憾的是这么多办法没有一个能解决该问题.尽管出现的错误码 ...

  10. Mybatis 简单的CRUD 基于XML文件配置

    全部的ORM框架学习曲线都是先来一个CRUD爽一爽,以下我们就来CRUD一下,全部的配置都是基于上一篇的配置.废话不多说,直接上代码. <?xml version="1.0" ...