跑步
【问题描述】
路人甲准备跑N (5≤N≤500)圈来锻炼自己的身体,他准备分多次跑完,每次都跑正整
数圈,然后休息下再继续跑。为了有效地提高自己的体能,他决定每次跑的圈数都必须比
上次跑的多。可以假设他刚开始跑了0圈,那么请问他可以有多少种跑完这N圈的方案?
【输入】
一个整数N
【输出】
跑完这N圈的方案数
【样例输入】
212
【样例输出】
995645335
===============
这道题相当于是数的拆分
----------------------------------
因为第i次的圈数一定要比i-1次的圈数多..
所以就相当于是数的拆分.....
--------------------------------------
转化为0/1背包问题...
1 2 3 4 5 6 7 8 9…………
-----------------------------------
var
n:longint;
f:array[0..500]of int64;
a:array[0..500]of longint;
procedure init;
begin
assign(input,'run.in');
assign(output,'run.out');
reset(input);
rewrite(output);
end;
procedure terminate;
begin
close(input); close(output);
halt;
end;
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
procedure main;
var
i,j:longint;
begin
readln(n);
//for i:=1 to n do f[i]:=0;
f[0]:=1;
//for i:=1 to n do a[i]:=i+n-1;
for i:=1 to n-1 do
for j:=n downto i do
f[j]:=f[j]+f[j-i];
writeln(f[n]);
end;
begin
init;
main;
terminate;
end.
================