这题也有很明显的线性关系,要求一串数字单调不递减 我们只需知道前面的那个数是否比自己大就好
在预处理每个数的组成方案后,后面的就是线性dp了 枚举前一个数的方案,与后面一个数的方案 由于前面一个数的组成方案已经求出来了,可以使用前缀和+二分把这一维优化成logn 最后复杂度为
n2logn
FOR(i,
1,m) {
FOR(j,
1,Way[i]) {
int now=upper_bound(Sum[i-
1]+
1,Sum[i-
1]+Way[i-
1]+
1,Sum[i][j])-Sum[i-
1]-
1;
dp[i][j]=dp[i-
1][
now];
}
FOR(j,
1,Way[i]) {
dp[i][j]+=dp[i][j-
1];
if(dp[i][j]>=Mod)dp[i][j]-=Mod;
}
}