算法:DP
分析:递推题目,设f[i]表示前i位有f[i]种完好的情况,那么f[m]=f[m-1]*2-1(因为第m个位置有两种情况:放与不放,再减去1~m都放的情况。)同理得F[i]=f[i-1]*2-f[i-m-1](因为i-m-1到i都不能放,而f[i-m-1]就是从i-m-1到i都放的情况。)
program Vijos1232;
const
maxn=50;
var
n,m,i:longint;
f:array [-1..maxn] of int64;
begin
assign(input,'VJ1232.in'); reset(input);
assign(output,'VJ1232.out'); rewrite(output);
readln(n,m);
f[-1]:=1;
f[0]:=1;
for i:=1 to n do
begin
if i>=m then f[i]:=(f[i-1] shl 1)-f[i-m-1]
else f[i]:=f[i-1] shl 1;
end;
writeln(f[n]);
close(input); close(output);
end.