试题编号: | 201312-4 |
试题名称: | 有趣的数 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 我们把一个数称为有趣的,当且仅当: 输入格式 输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000)。 输出格式 输出只有一行,包括恰好n 位的整数中有趣的数的个数除以1000000007的余数。 样例输入 4 样例输出 3 |
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const long long mod =1000000007;
const int N =1005;
long long arr[N][6];
//2;2,0;2,3;2,0,1;//2,3,0;0,1,2,3;
//动态规划
int main(int argc, char** argv)
{
memset(arr,0,sizeof(arr));
int n;
cin>>n;
//1位只含2的情况有一种
arr[1][0]=1;
for(int i=2;i<=n;i++)
{
//i位只含2的情况只有一种
arr[i][0]=1;
//i位只含2,0的情况等于i-1位只含2,0的情况后跟(2或0)+i-1位只含2后加0;
arr[i][1]=(arr[i-1][1]*2+arr[i-1][0])%mod;
//i位只含2,3的情况等于i-1位只含2,3的情况后跟(3)+i-1位只含2后加3;
arr[i][2]=(arr[i-1][2]+arr[i-1][0])%mod;
//i位只含2,0,1的情况等于i-1位只含2,0,1的情况后跟(2或1)+i-1位只含2,0后加1;
arr[i][3]=(arr[i-1][3]*2+arr[i-1][1])%mod;
//i位只含2,0,3的情况等于i-1位只含2,0,3的情况后跟(3或0)+i-1位只含2,3后加0+i-1位只含2,0后加3;
arr[i][4]=(arr[i-1][4]*2+arr[i-1][2]+arr[i-1][1])%mod;
//i位只含2,0,1,3的情况等于i-1位只含2,0,1,3的情况后跟(3或1)+i-1位只含2,3,0后加1+i-1位只含2,0,1后加3;
arr[i][5]=(arr[i-1][5]*2+arr[i-1][3]+arr[i-1][4])%mod;
}
cout<<arr[n][5]<<endl;
return 0;
}