/*<br /> 演算法剖析:<br />觀察規律,下一個序列為前一個序列的複製,取反後連結起來,即<br />1<br /> 01<br />10 01<br />0110 1001<br />10010110 01101001<br />所以當前序列連續0的對數等於前一個序列0的對數加1的對數,如果為奇數時,還要加上串連處形成的1對.<br />故可寫出遞推方程:<br />f[n][0] = f[n-1][0] + f[n-1][1];<br />由於成指數級增長,所以採用JAVA大數類,非常方便!</p><p>http://www.tkz.org.ru/2009-05/%E3%80%90%E9%A2%98%E8%A7%A3%E7%BB%8F%E9%AA%8C%E3%80%91hdoj1041-java%E5%A4%A7%E6%95%B0%E7%B1%BB%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E9%87%8D%E5%AE%9A%E5%90%91/</p><p> */<br />import java.util.*;<br />import java.io.*;<br />import java.math.*;<br />public class Main1041 {<br />static BigInteger f[][] = new BigInteger[1002][2];<br />static BigInteger g[] = new BigInteger[1005];<br />public static void main(String[] args) {<br />Scanner cin = new Scanner(System.in);<br />Sovle();<br />F();<br />while (cin.hasNext()) {<br />//System.out.println(f[cin.nextInt() + 1][0]);<br />System.out.println(g[cin.nextInt()]);<br />}<br />}<br />static void Sovle() {<br />f[1][0] = BigInteger.ZERO;<br />f[1][1] = BigInteger.ZERO;<br />for (int i = 2; i <= 1001; i++) {<br />f[i][0] = f[i - 1][0].add(f[i - 1][1]);<br />f[i][1] = f[i - 1][0].add(f[i - 1][1]);<br />if (i % 2 == 1)<br />f[i][0] = f[i][0].add(BigInteger.ONE);<br />}<br />}</p><p>static void F(){<br />g[1] = BigInteger.ZERO;<br />g[2] = BigInteger.ONE;<br />for(int i = 3; i <= 1000; i++)<br />g[i] = g[i - 2].add(BigInteger.valueOf(2).pow(i - 3));<br />}<br />}<br />