还是不会讲题QWQ。
题目大意
Sam数:相邻的俩位差值不超过2。求k位数中,Sam数有多少个。
Input
第一行为一个整数k。
Output
一行一个整数ans,表示k位的Sam数的个数。
由于第k阶Sam数非常多,你只需要输出ans mod 1,000,000,007。
【数据规模和约定】
对于30%的数据,1 ≤ k ≤ 6。
对于60%的数据,1 ≤ k ≤ 1000。
对于100%的数据,1 ≤ k ≤ 1000000。
思路
用a[i][j]表示第i位为j的时候有多少种选法。
由于选第i位时,它的合法性之和前面一位有关系,所以可以用滚动。但是我们oj滚动会卡90。。。然后过一会就A了。。。然后这题也可以不开滚动。
a[i][j]=a[i-1][k]的和。
(j-2<=k<=j+2)
特殊情况:0不可以作为开头被选。
代码
丑。
#include<cstdio>
#include<iostream>
using namespace std;
int n;
long long a[5][11];
int main(){
scanf("%d",&n);
for(int i=0;i<=9;++i) a[1][i]=1;
if(n>=2){
a[2][0