[FJOI2007]轮状病毒
时间限制: 1 Sec 内存限制: 128 MB
题目描述
给定n(N<=100),编程计算有多少个不同的n轮状病毒。
输入
第一行有1个正整数n。
输出
将编程计算出的不同的n轮状病毒数输出
样例输入
3
样例输出
16
题解
f[i]=(f[i-1]*3-f[i-2]+2)
var
w:array[1..100,0..43]of longint;
i,j:longint;
n:longint;
procedure did(a:longint);
var last,i,b:longint;
begin
last:=0; b:=0;
for i:=1 to w[a-1,0] do
begin
b:=w[a-1,i]*3;
w[a,i]:=(b+last) mod 10;
last:=(b+last) div 10;
end;
if last<>0 then begin w[a,w[a-1,0]+1]:=last; w[a,0]:=w[a-1,0]+1; end
else w[a,0]:=w[a-1,0];
last:=0; b:=0;
for i:=1 to w[a,0] do
begin
if i=1 then b:=w[a,i]+2
else b:=w[a,i];
w[a,i]:=(b+last) mod 10;
last:=(b+last) div 10;
end;
if last<>0 then begin w[a,w[a,0]+1]:=last; inc(w[a,0]); end;
last:=0; b:=0;
for i:=1 to w[a,0] do
begin
if w[a,i]+last>=w[a-2,i] then begin w[a,i]:=w[a,i]+last-w[a-2,i]; last:=0; end
else
begin
b:=w[a,i]+10;
w[a,i]:=b+last-w[a-2,i];
last:=-1;
end;
end;
end;
begin
w[1,1]:=1; w[2,1]:=5;
w[1,0]:=1; w[2,0]:=1;
readln(n);
for i:=3 to n do
did(i);
if w[n,w[n,0]]=0 then dec(w[n,0]);
for j:=w[n,0] downto 1 do
write(w[n,j]);
writeln;
end.