题目传送门(内部题111)


输入格式

  一个整数$T$,表示测试数据组数。
  每组测试数据占一行,两个整数,分别表示$L$和$S$。


输出格式

  对每组数据,输出一个整数表示答案。


样例

样例输入1:

1
3 7

样例输出1:

7

样例输入2:

2
4 2
10 11

样例输出2:

4
410199993


数据范围与提示

样例$1$解释:

  一共有$7$种形态,每种形态能构成$1$个方案。

样例$2$解释:

  AAAB
  ABBB
  BAAA
  BBBA

数据范围:

  对于$60\%$的数据,$L\leqslant 30,S\leqslant 26$。
  对于$80\%$的数据,$L\leqslant 10,000,S\leqslant 26$。
  对于$100\%$的数据,$L\leqslant 100,000,S\leqslant 100,000$。


题解

不给暴力分,导致考场许多想偏了的$dalao$直播$TLE0$……

考虑$DP$。

先来考虑$80$分的做法。

因为在处理当前位的时候只与最后两位有关系,于是我们可以设$dp[i][j][k][0/1]$表示处理到$i$,当前位是$k$,上一位为$j$,是否已经出现过三连的方案数。

转移很暴力,枚举$j,k$,再枚举当前位是什么就好了。

发现形态只有相同与不同,而与具体是哪种情况无关,于是考虑换一个状态定义,说一下我的做法,与题解略有不同,设$dp[i][0/1][0/1]$表示处理到$i$,是否与上一位相同,是否出现过三连即可。

下面给出四个状态转移方程:

  $\alpha.dp[i][0][0]=(dp[i-1][0][0]+dp[i-1][1][0])\times (S-1)$:可以由上一位二连或不是二连转移过来,只要与上一位不同即可,所以要乘上$(S-1)$;但是不能三连边没有。

  $\beta.dp[i][0][1]=(dp[i-1][0][1]+dp[i-1][1][1])\times (S-1)$:不能创造三连,只能继承上面的三连,$(S-1)$与上式同理。

  $\gamma.dp[i][1][0]=dp[i-1][0][0]$:只能由上一位没有二连转移过来,否则会出现三连,那么第三维就不能是$0$了。

  $\delta.dp[i][1][1]=dp[i-1][0][1]+dp[i-1][1][0]$:这次可以继承前面的三连,但是注意不能再出现三连;还可以创造三连,这时候需要上一位是二连。

时间复杂度:$\Theta(n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
int L,S;
long long dp[100001][2][2];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&L,&S);
memset(dp,0,sizeof(dp));
dp[2][0][0]=1LL*S*(S-1)%mod;
dp[2][1][0]=S;
for(int i=3;i<=L;i++)
{
dp[i][0][0]=(dp[i-1][0][0]+dp[i-1][1][0])%mod*(S-1)%mod;
dp[i][0][1]=(dp[i-1][0][1]+dp[i-1][1][1])%mod*(S-1)%mod;
dp[i][1][0]=dp[i-1][0][0];
dp[i][1][1]=(dp[i-1][0][1]+dp[i-1][1][0])%mod;
}
printf("%lld\n",(dp[L][0][1]+dp[L][1][1])%mod);
}
return 0;
}

rp++

[CSP-S模拟测试]:花(DP)的更多相关文章

  1. csp-s模拟测试97

    csp-s模拟测试97 猿型毕露.水题一眼秒,火题切不动,还是太菜了. $T1$看了一会儿感觉$woc$期望题$T1??$假的吧??. $T2$秒. $T3$什么玩意儿. 40 01:24:46 00 ...

  2. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  3. [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania

    [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...

  4. noi2019模拟测试赛(四十七)

    noi2019模拟测试赛(四十七) T1与运算(and) 题意: ​ 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...

  5. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

  6. [考试反思]1003csp-s模拟测试58:沉淀

    稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...

  7. [考试反思]0814NOIP模拟测试21

    前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...

  8. csp-s模拟测试98

    csp-s模拟测试98 $T1$??不是我吹我轻松手玩20*20.$T2$装鸭好像挺可做?$T3$性质数据挺多提示很明显? $One$ $Hour$ $Later$ 这$T1$什么傻逼题真$jb$难调 ...

  9. csp-s模拟测试95

    csp-s模拟测试95 去世场祭. $T1$:这不裸的除法分块吗. $T2$:这不裸的数据结构优化$Dp$吗. $T3$:这不裸的我什么都不会搜索骗$30$分吗. 几分钟后. 这除法分块太劲了..(你 ...

随机推荐

  1. python多任务——协程的使用

    使用yield完成多任务 import time def test1(): while True: print("--1--") time.sleep(0.5) yield Non ...

  2. golang(6): 接口 & 反射

    接口详解 // 举例:sort包中的 Sort 函数,如下: func Sort(data Interface) Sort sorts data. It makes one call to data. ...

  3. python 字符串前面加r,u的含义

    u/U:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码. 一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u:但是中文, ...

  4. hdu 6399 City Development

    vjudge 读进来可能会有相同的\(n_i\),不过在相同的\(n_i\)中只有最后一个是有用的,所以其他的要缩起来,缩完后这些\(n\)的数量不会超过19个 可以发现一个城市的答案为所有城市初始权 ...

  5. iview表单验证之正则验证、函数验证

    iview表单验证之正则 正则验证: 代码: loginRules: { stringLength: [ { required: true, message: '该字段不能为空', trigger: ...

  6. javaee 自定义标签实战

    用过javaee标准标签库的里的标签应该都知道,标签的存在使得页面上的jsp脚本大大减少,甚至说没有了,大大提高了工作效率,使得页面的整洁性也有了很大的提高.下面我们就 模仿核心标签库中choose标 ...

  7. Codeforces Round #581 (Div. 2) C. Anna, Svyatoslav and Maps (Floyd 算法,最短路)

    C. Anna, Svyatoslav and Maps time limit per test2 seconds memory limit per test256 megabytes inputst ...

  8. java 获取bean的方式

    我们知道可以通过ApplicationContext的getBean方法来获取Spring容器中已初始化的bean.getBean一共有以下四种方法原型: l getBean(String name) ...

  9. python 单元测试_unittest(七)

    一.unittest中各阶段的核心概念:TestCase, TestSuite, 断言函数, TextTestRunner,TestFixture TestCase:所用用例的基类,软件测试中基本的测 ...

  10. Kendo UI for jQuery使用教程:小部件DOM元素结构

    [Kendo UI for jQuery最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support ...