问题出处:
http://acm.hdu.edu.cn/showproblem.php?pid=2047
用f[i][0]表示当第i个为"O"时的排列数,同理
用f[i][1]表示当第i个为"E"时的排列数,
用f[i][2]表示当第i个为"F"时的排列数,则
可以:
用如下状态转移方程:
f[i][0]=f[i-1][1]+f[i-1][2];
f[i][1]=f[i-1][0]+f[i][0];
f[i][2]=f[i-1][0]+f[i][0];
给出AC代码:
import java.awt.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main{
public static void main(String[] args) throws IOException {
Scanner in=new Scanner(new InputStreamReader(System.in));
long[][] f=new long[41][3];
f[1][0]=f[1][1]=f[1][2]=1;
for (int i = 2; i < f.length; i++) {
f[i][0]=f[i-1][1]+f[i-1][2];
f[i][1]=f[i-1][0]+f[i][0];
f[i][2]=f[i-1][0]+f[i][0];
}
while (in.hasNext()) {
int m=in.nextInt();
long ans=f[m][0]+f[m][1]+f[m][2];
System.out.println(ans);
}
}
}