题意
长度为 n 和为 s 而且后一项总是比前一项增加 a 或者减少 b 的整数数列可能有多少种。
1<=n<=1e3,−1e9<=s<=1e9,1<=a,b<=1e6
题解
设数列首项为a1,增量为d1,d2,⋯,dn−1,则na1+n−1∑i=1(n−i−1)di=s
因为a1可以取任意值,所以n−1∑i=1(n−i−1)di≡s(modn)
dp[i][j]表示长度为i,i−1∑k=1(n−k−1)dkmodn=j 的方案数。
代码
1 |
|
长度为 n 和为 s 而且后一项总是比前一项增加 a 或者减少 b 的整数数列可能有多少种。
1<=n<=1e3,−1e9<=s<=1e9,1<=a,b<=1e6
设数列首项为a1,增量为d1,d2,⋯,dn−1,则na1+n−1∑i=1(n−i−1)di=s
因为a1可以取任意值,所以n−1∑i=1(n−i−1)di≡s(modn)
dp[i][j]表示长度为i,i−1∑k=1(n−k−1)dkmodn=j 的方案数。
1 | #include <bits/stdc++.h> |