【省選水題集Day1】一起來AK水題吧! 題解(更新到A)
阿新 • • 發佈:2017-06-03
簡單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)