1. 程式人生 > >【省選水題集Day1】一起來AK水題吧! 題解(更新到A)

【省選水題集Day1】一起來AK水題吧! 題解(更新到A)

簡單dp log write .cn var 滾動 最優 har 復雜度

題目:http://www.cnblogs.com/ljc20020730/p/6937936.html

水題A:[AHOI2001]質數和分解

安徽省選OI原題!簡單Dp。

一看就是完全背包求方案數!

完全背包都會打吧,原來是最優值,現在是累計值。

狀態轉移方程:f[j]=f[j]+f[j-w[i]],w[i]是待選質數。

理解:一個數要拆成若幹素數和,等同於拆成所有該數減去一個素數差的方案數之和(而不是最優方案數)

但這麽做需要初始化為0,同時用滾動數組可以減小時間和空間復雜度。

代碼如下:(懶得打篩法求素數了)

const maxn=200;
var w,f:array[0..1000000]of longint;
    u:
array[1..1000000]of boolean; i,j,x,t:longint; begin w[1]:=2; fillchar(u,sizeof(u),true); inc(t); for i:=3 to maxn do begin for j:=2 to (i div 2)do if i mod j=0 then begin u[i]:=false; break;end; if u[i] then begin inc(t); w[t]:=i;end; end; f[0]:=1; for i:=1 to t do for j:=w[i] to maxn do f[j]:
=f[j]+f[j-w[i]]; while not eof do begin readln(x); writeln(f[x]); end; end.

2017-6-3 更新

【省選水題集Day1】一起來AK水題吧! 題解(更新到A)