[CSP-S模拟测试]:花(DP)
题目传送门(内部题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)的更多相关文章
- csp-s模拟测试97
csp-s模拟测试97 猿型毕露.水题一眼秒,火题切不动,还是太菜了. $T1$看了一会儿感觉$woc$期望题$T1??$假的吧??. $T2$秒. $T3$什么玩意儿. 40 01:24:46 00 ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania
[2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...
- noi2019模拟测试赛(四十七)
noi2019模拟测试赛(四十七) T1与运算(and) 题意: 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...
- [考试反思]1109csp-s模拟测试106:撞词
(撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...
- [考试反思]1003csp-s模拟测试58:沉淀
稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...
- [考试反思]0814NOIP模拟测试21
前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...
- csp-s模拟测试98
csp-s模拟测试98 $T1$??不是我吹我轻松手玩20*20.$T2$装鸭好像挺可做?$T3$性质数据挺多提示很明显? $One$ $Hour$ $Later$ 这$T1$什么傻逼题真$jb$难调 ...
- csp-s模拟测试95
csp-s模拟测试95 去世场祭. $T1$:这不裸的除法分块吗. $T2$:这不裸的数据结构优化$Dp$吗. $T3$:这不裸的我什么都不会搜索骗$30$分吗. 几分钟后. 这除法分块太劲了..(你 ...
随机推荐
- multivariate_normal 多元正态分布
多元正态分布 正态分布大家都非常熟悉了,多元正态分布就是多维数据的正态分布,其概率密度函数为 上式为 x 服从 k 元正态分布,x 为 k 维向量:|Σ| 代表协方差矩阵的行列式 二维正态分布概率密度 ...
- vue项目中微信jssdk在ios签名失败
一.问题描述 1. vue项目中微信jssdk签名时,在安卓和ios是有差异的,签名时使用的url=window.location.href.split('#')[0],此时在安卓没问题,在ios会导 ...
- CentOS7 安装ffmpeg
安装EPEL Release,因为安装需要使用其他的repo源,所以需要EPEL支持:yum install -y epel-release#如果出现缺少Code提示,可以: sudo rpm --i ...
- [转载]布隆过滤器(Bloom Filter)
[转载]布隆过滤器(Bloom Filter) 这部分学习资料来源:https://www.youtube.com/watch?v=v7AzUcZ4XA4 Filter判断不在,那就是肯定不在:Fil ...
- Spring的基本应用(1):依赖以及控制反转
在说到这里的时候,首先要说下程序的耦合和解耦,以便对上节做一个解释. 一.程序的耦合和解耦 1.程序的耦合性(Copling) (1)程序的耦合性,也叫做耦合度,是对模块之间关联程度的度量,耦合性的强 ...
- Spring的基本应用(1):IDEA版本
一.Spring概述: 1.什么是Spring? Spring是分层的JavaSE/EE应用full-stack(一站式)轻量级开源框架,以IoC(Inverse Of Control:控制反转)和A ...
- docker之常用命令
1) docker run -p : --name mysql -v d:/docker/mysql/conf:/etc/mysql/conf.d -v d:/docker/mysql/logs:/l ...
- git 基本命令操作
配置 Git 的相关参数. Git 一共有3个配置文件: 1. 仓库级的配置文件:在仓库的 .git/.gitconfig,该配置文件只对所在的仓库有效.2. 全局配置文件:Mac 系统在 ~/.gi ...
- TensorFlow入门——MNIST初探
import tensorflow.examples.tutorials.mnist.input_data as input_data import tensorflow as tf mnist = ...
- python3 调用zabbix API实现批量增加删除主机,主机各种监控项------实战
在以前的博客中谈到了利用zabbix接口来对主机进行批量的增删改查 这里在不用环境中实战遇到了不同问题,这里记录下来以便后续review 以下为实战中获取token的代码,在zabbix标准接口文档中 ...