1 Arithmetic Slices
在等差数列的简单算法中,思路的重点就是对于符合等差的数列的扩展的数字游戏
以[2 4 6 8 10]为例子
- 前三位
24 6为最短的等差数列 且只有dp =1
考虑8
2 4 6 8在上面等差数列扩展了一位,那么这一位的增加,等差数列可选
2 4 6 8 对 2 4 6的位数延长
4 6 8 增加的一个等差数列
所以为2
那么最后的等差数列就是 1+2=3;
2.Arithmetic Slices II - Subsequence
但是在变形体中,发现等差数列不仅下标相差1,而且可以随意从小到大去数字构建等差数列。
当然还是动态规划问题
但重点是怎么构建动态规划的递归方程。
考虑dp[i][diff]+=dp[j][diff]+1;
重点在于dp[i][diff]表示在0~i的所有数字中公差为diff的数字有多少个。
PS: diff=A[i]-A[j];
那么从图像看一下
2
4 2->1
6 4->1 2->2(公差为4的数字一共2个)
8 6->1 4->1 2->3
10 8->1 6->1 4->2 2->4
然后所有的项-1然后求和
1+2+1+3=7