标签:过程 href 有趣的 blog 情况 附加 lang 需要 name
考虑有趣数的最高位的数字,0不能在首位,1不能出现在0前,3不能出现在2前,则最高位数字一定为2。
考虑在低位增加数字构造N位有趣数:
问题需要求解N位数中有趣数的个数,则由上述的状态转移关系可以计算N位有趣数的个数。
例如:
则状态转移过程中K位数的数量计算式为:
K位数的数量 = \(\sum\) 可以附加1位数变为符合要求的K-1位数 * 附加数字情况的数量
#include <iostream>
#define MAXN 1000000007
using namespace std;
int main() {
int N;
cin >> N;
long long s2 = 1, s02 = 0, s23 = 0,
s023 = 0, s012 = 0, s0123 = 0;
int i;
for (i = 1;i < N;++i) {
s0123 = (s0123 * 2 + s023 + s012) % MAXN;
s012 = (s012 * 2 + s02) % MAXN;
s023 = (s023 * 2 + s23 + s02) % MAXN;
s23 = (s23 + s2) % MAXN;
s02 = (s02 * 2 + s2) % MAXN;
}
cout << s0123;
}
标签:过程 href 有趣的 blog 情况 附加 lang 需要 name
原文地址:https://www.cnblogs.com/amonqsq/p/13514517.html