算法:模拟+DP
分析:挺好做的一道题,用一下完全背包。
分析:挺好做的一道题,用一下完全背包。
先弄个质数表,然后用刚好比它小的一个质数和之前的质数组成它就行了。
program zhishufenjie;
const
maxn=200;
var
n,tot:longint;
a,f,t:array [0..maxn] of longint;
procedure init;
var
i,j:longint;
begin
tot:=2;
a[1]:=2;
a[2]:=3;
for i:=2 to 200 do
begin
for j:=2 to trunc(sqrt(i)) do if i mod j=0 then break;
if (j=trunc(sqrt(i))) and (i mod j<>0) then
begin
inc(tot);
a[tot]:=i;
end;
end;
end;
procedure main;
var
i,j,m:longint;
begin
fillchar(f,sizeof(f),0);
f[0]:=1;
for i:=1 to tot do
begin
if a[i]>n then
begin
m:=i-1;
break;
end;
if ((a[i]<n) or (a[i]=n)) and (i=tot) then m:=tot;
end;
for i:=1 to m do
begin
for j:=a[i] to n do
inc(f[j],f[j-a[i]]);
end;
t[n]:=f[n];
writeln(f[n]);
end;
begin
assign(input,'zhishufenjie.in'); reset(input);
assign(output,'zhishufenjie.out'); rewrite(output);
init;
while not eof do
begin
readln(n);
if t[n]=0 then main else writeln(t[n]);
end;
close(input); close(output);
end.
本文介绍了一种利用完全背包算法解决特定问题的方法,通过构建质数表并运用数学性质简化问题求解过程。
2359

被折叠的 条评论
为什么被折叠?



