算法:DP
分析:一直感觉挺数学的一道题,用f[i,j]表示i分成j组的方案数,因为数是按照从小到大排列的,若组成的数中最小数是1,那么把它单独划分为一组,即为f[i-1,j-1],如果不是1,那么就是f[i-j,j](分出来了j个1)。
分析:一直感觉挺数学的一道题,用f[i,j]表示i分成j组的方案数,因为数是按照从小到大排列的,若组成的数中最小数是1,那么把它单独划分为一组,即为f[i-1,j-1],如果不是1,那么就是f[i-j,j](分出来了j个1)。
初始化f[0,0]=1,最后输出答案为f[n,m]。
program Vijos1117;
const
maxn=200;
maxk=6;
var
n,m:longint;
f:array [0..maxn,0..maxk] of longint;
procedure init;
begin
readln(n,m);
f[0,0]:=1;
end;
procedure main;
var
i,j,k:longint;
begin
for i:=1 to n do
begin
for j:=1 to m do
begin
if i>=j then
f[i,j]:=f[i-j,j]+f[i-1,j-1];
end;
end;
end;
begin
assign(input,'VJ1117.in'); reset(input);
assign(output,'VJ1117.out'); rewrite(output);
init;
main;
writeln(f[n,m]);
close(input); close(output);
end.