题目链接:
http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=252
分析:
dp[2][0]=2;//表示长度为2的满足要求的且以0结尾的串个数
dp[2][1]=1;//表示长度为2的满足要求的且以1结尾的串个数
状态转移方程:
dp[i][0]=dp[i-1][0]+dp[i-1][1];
dp[i][1]=dp[i-1][0];
代码如下:
#include<bits/stdc++.h> using namespace std; int main() { int dp[41][2]; dp[2][0]=2;//表示长度为2的满足要求的且以0结尾的串个数 dp[2][1]=1;//表示长度为2的满足要求的且以1结尾的串个数 for(int i=3;i<=40;i++) { dp[i][0]=dp[i-1][0]+dp[i-1][1]; dp[i][1]=dp[i-1][0]; } int n; scanf("%d",&n); while(n--) { int m; scanf("%d",&m); printf("%d ",dp[m][0]+dp[m][1]); } return 0; }