题目URL:http://acm.nyist.net/JudgeOnline/problem.php?pid=252
简单的动态规划
要计算不含有“11”子串的n长度的01串共有多少个,
n-1长度的01串有加0 or 加1两种方式来成为n长度的01串,
1)加0肯定符合不含有“11”子串的要求。
2)加1的话只有在尾数为0的情况下才可以。而n-1长度的01串尾数为0的情况不就是n-2长度的01串全部加0么!
所以,设这个对应关系是d,那么:
d(1)=2
d(2)=3
d(3)=d(2)+d(1)
d(4)=d(3)+d(2)
.....
依此实现,源代码很简单了:
import java.util.Scanner;
public class Main {
public static void main(String...args){
n = cin.nextInt();
//打表
map = new int[41];
map[1] = 2;
map[2] = 3;
for(int i = 3; i <= 40; i++){
map[i] = map[i-1] + map[i-2];
}
while(n-- != 0){
m = cin.nextInt();
System.out.println(map[m]);
}
}
static int n, m;
static int[] map;
static Scanner cin = new Scanner(System.in);
}