题意:给定三个数N,M,K
N为序列长度,M为每个序列的大小,K为每个序列与后一个序列差值的绝对值
求这种序列组合数
思路:
典中典dp求组合数,但我一直都没怎么刷过dp,,,,
首先考虑dp数组状态
根据题目,状态转移是根据序列某个位置与下一个位置的差值决定的
那么假设:dp[i][j],i为序列所在的位置,j为数列长度
讨论第一维,dp[i]必然由dp[i-1]这个状态转移而来
对于第二维,dp[i][j]由dp[i-1][m]转移过来,m是所有与j相减大于等于K的数
但这样复杂度就是N*(M^2),纯纯的超时
这里我们可以分析,m是一个连续的区域,那么利用前缀和的思想,可以达成o1级别的查询
再考虑一下初始状态dp[1][j]全部赋值成1
但接下来你就会发现
wa了
还需要特判k=0的情况,这时候每一位xjb取就行
#include
#include