题目(vjudge)

题面

题意:

  你有K个字母,你需要用K个字母组成L长度的字符串,定义对于该字符串的任意前缀P 必须满足    ,输出方案数%1000000007的值。

思路:

  首先可以想到一种简单的dp方程  dp [ len ] [ a ]  [b ]  表示当前字符串长度为len  个数为最多的字母有 a个  个数次多的有b个  (那么个数最少的有k-a-b个)状态数有 100*100,没办法矩阵快速幂加速dp.

  考虑对于某个固定长度 len  如果确定 a,容易发现 b = (len % K - a),  发现dp方程可以转化成 dp[ len ] [ a ] 但是依旧不能矩阵快速幂 ,因为对于len-1到len的 每个状态 a 的转移方程的系数与 len%K 相关,

于是稍微转换一下方程  由 len-K 转移到 len  (每次放K个字符 ),这时候容易发现 转移方程的系数也不在改变了 于是我们先预处理放K步的dp方程的系数矩阵 然后转移L/K次 (利用矩阵快速幂加速),最后剩下L%K步暴力dp就好了

(参考了别人的题解)

代码:

#include <stdio.h>
#include <bits/stdc++.h>
#define IV inline void
typedef unsigned long long ull;
using namespace std;
const int mod = 1e9+;
ull dp[][][],B[][],A[][],C[][];
int K,t;
IV DP(int L)
{
for (int len=;len<=L;len++){
for (int i=;i<K;i++){
for (int j=;j<=K;j++){
int w=*K+len-;
int l2=w-*(j-);
while (l2+(j-)>K)l2-=K;
if (l2>=)dp[len][i][j%K]+=dp[len-][i][j-]*(l2);
if (j==&&l2>=)dp[len][i][j%K]+=dp[len-][i][l2]*(l2);
l2=w-*j;
while (l2+j>K)l2-=K;
int l3=K-j-l2;
if (l2>=&&l3>=)dp[len][i][j%K]+=dp[len-][i][j%K]*(l3);
dp[len][i][j%K]%=mod;
}
}
}
}
IV init()
{
memset(dp,,sizeof(dp));
memset(B,,sizeof(B));
B[][]=;
for (int i=;i<K;i++)dp[][i][i]=;
DP(K);
for (int i=;i<K;i++)for (int j=;j<K;j++)A[i][j]=dp[K][i][j];
}
IV mul(ull A[][],ull B[][])
{
memset(C,,sizeof(C));
for (int i=;i<K;i++)
for (int j=;j<K;j++)
for (int k=;k<K;k++)
C[i][k]=(C[i][k]+A[i][j]*B[j][k])%mod;
memcpy(A,C,sizeof(C));
}
IV pow(long long n)
{
while (n){
if (n&)mul(B,A);
mul(A,A);
n>>=;
}
}
int main()
{
long long n,ans;
scanf("%d",&t);
while (t--&&~scanf("%lld%d",&n,&K)){
ans=;
init();
pow(n/K);
memset(dp,,sizeof(dp));
for (int i=;i<K;i++)
for (int j=;j<K;j++)
dp[][i][j]=B[i][j];
DP(n%K);
int L=n%K;
for (int j=;j<K;j++)ans+=dp[L][][j];
printf("%lld\n",ans%mod);
}
return ;
}

UVA-11625-Nice Prefixes (DP+矩阵快速幂)的更多相关文章

  1. bnuoj 34985 Elegant String DP+矩阵快速幂

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant s ...

  2. HDU 5434 Peace small elephant 状压dp+矩阵快速幂

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5434 Peace small elephant  Accepts: 38  Submissions: ...

  3. 【BZOJ】2004: [Hnoi2010]Bus 公交线路 状压DP+矩阵快速幂

    [题意]n个点等距排列在长度为n-1的直线上,初始点1~k都有一辆公车,每辆公车都需要一些停靠点,每个点至多只能被一辆公车停靠,且每辆公车相邻两个停靠点的距离至多为p,所有公车最后会停在n-k+1~n ...

  4. 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂

    [题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...

  5. BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*

    BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻 ...

  6. Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】

    题意: 有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k. 分 ...

  7. codeforces E. Okabe and El Psy Kongroo(dp+矩阵快速幂)

    题目链接:http://codeforces.com/contest/821/problem/E 题意:我们现在位于(0,0)处,目标是走到(K,0)处.每一次我们都可以从(x,y)走到(x+1,y- ...

  8. [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)

    [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...

  9. 瓷砖铺放 (状压DP+矩阵快速幂)

    由于方块最多涉及3行,于是考虑将每两行状压起来,dfs搜索每种状态之间的转移. 这样一共有2^12种状态,显然进行矩阵快速幂优化时会超时,便考虑减少状态. 进行两遍bfs,分别为初始状态可以到达的状态 ...

随机推荐

  1. luogu P2776 [SDOI2007]小组队列

    题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一提的是,标程是我自己做的.. 很渣,因为数 ...

  2. [51Nod1487]占领资源

    题目大意:​ 有一个$n\times m(x,m\leq 100)$的网格图,每个格子有一个权值$w_{i,j}(1\leq w_{i,j}\leq 9)$.你可以在图中选两个格子,每个格子$(x,y ...

  3. String中的方法

    1.string s1 = "abcdefghij";   string s2 = "kuo";   Console.WriteLine(s1.Clone()) ...

  4. Linux下Shell的复制粘贴快捷键

    [Shift]+[Insert]:复制 [Ctrl]+[Insert]:粘贴

  5. 深入解析SQL Server并行执行原理及实践(上) ---高继伟

    http://www.cnblogs.com/shanksgao/p/5497106.html

  6. JAVA常见算法题(十)

    package com.xiaowu.demo; /** * 一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下……求它在第10次落地时,共经过多少米?第10次反弹多高? * * @au ...

  7. Solr 创建core 从MySql数据库中导入数据

    一.创建数据表和数据 在MySql数据中创建mysolrInfo表, 创建字段 id 主键,自动增加 pname :姓名 age :年龄 addtime :增加时间 增加几条数据 二.创建core 当 ...

  8. 2017.3.31 spring mvc教程(六)转发、重定向、ajax请求

    学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...

  9. NeatBean下ssh 私钥格式问题

    1. SecureCRT 生成的private key 的格式是其私有的格式, 2. 标准格式为 openssl 格式

  10. 通过Fsharp探索Enterprise Library Exception

    Exception怎么生成是一回事,怎么展示又是还有一回事了. Exception Block主要关注的点在于Exception信息的展示.Exception不同于一般的log信息,是系统设计者未考虑 ...