C语言有趣的数题目怎么解

2025-04-28 04:56:54
推荐回答(2个)
回答1:

看看这个代码行不行:

#include 
using namespace std;

int dp[1001][16] = { 0 };
const int prime = 1000000007;

int main() {
int n;
cin >> n;
dp[0][0] = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < 16; j++) {
if (dp[i][j] == 0) continue;
if ((j & 2) == 0 && i != 0)
dp[i + 1][j | 1] = (dp[i + 1][j | 1] + dp[i][j]) % prime;
dp[i + 1][j | 2] = (dp[i + 1][j | 2] + dp[i][j]) % prime;
if ((j & 8) == 0)
dp[i + 1][j | 4] = (dp[i + 1][j | 4] + dp[i][j]) % prime;
dp[i + 1][j | 8] = (dp[i + 1][j | 8] + dp[i][j]) % prime;
}
}
cout << dp[n][15] << endl;
}

回答2:

你把题目详细描述一下