题目大意:输入自然数n,然后将其拆分成由若干数相加的形式,参与加法运算的数可以重复。
这道题目要转化啊……c[i.j]表示将数字i拆成j个数(易知j<=i)那么c[i-j,j]表示的则是从比i小j的数拆分成j个数,将这j个数每个都+1就转移到了c[i,j],另外一种是c[i-1,j-1]添加一个新的数字1也可以转移到当前状态。
program Neayo; const inf='number.in'; ouf='number.out'; var i,j,k,n:longint; ans:int64; f:array[0..501,0..501]of int64; procedure init; begin assign(input,inf);assign(output,ouf); reset(input);rewrite(output); readln(n); close(input); end; procedure go; begin f[0,1]:=1; for i:=1 to n do for j:=1 to i do f[i,j]:=(f[i-1,j-1]+f[i-j,j])mod 10000007; for i:=2 to n do ans:=(ans+f[n,i])mod 10000007; writeln(ans); end; begin init; go; close(output); end.