Tyvj1091
題目鏈接
分析:
最近做的區(qū)間dp挺多
最簡單的:n^3枚舉,顯然TLE
其實有一個很顯然的dp狀態(tài):
f[i][j]表示結(jié)尾是i,j的等差數(shù)列的數(shù)量:
f[i][j]=Σ(f[k][j]+1) (a[i]-a[j]=a[j]-a[k])
但是這樣的復(fù)雜度也是n^3
這是我們要注意到題目中a[i]的范圍只有+-500
那我們就可以設(shè)計狀態(tài):
f[i][j]表示結(jié)尾是i,公差是j的等差數(shù)列的個數(shù)
然而真正的轉(zhuǎn)移方程長這樣:
f[i][a[i]-a[j]]=Σ(f[j][a[i]-a[j]]+1)
這樣可以同時保證公差一定是序列中存在的,而且復(fù)雜度為n^2
//+1是i和j組成的一個等差數(shù)列
最后的答案要加上n
tip
這道題的轉(zhuǎn)移較為新穎,沒有直接枚舉公差,而是枚舉最后兩個數(shù),
但是狀態(tài)的轉(zhuǎn)移還是根據(jù)公差,
這樣就可以直接把dp降下一維了
c++的下標(biāo)從0開始,這是需要特別注意的一點
從此題可以看出
某一類具有一定階段性的計數(shù)題目也可以用dp來解決
轉(zhuǎn)載于:https://www.cnblogs.com/wutongtong3117/p/7673272.html
總結(jié)
- 上一篇: 虚拟机中运行mac系统很卡
- 下一篇: [3.30校内训练赛]