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