
1.状态表示
是什么?dp表中里的值所表示的含义就是状态表示
dp[i]表示:以i位置为结尾的所有子数组中有多少个等差数列
2.状态转移方程
dp[i] 等于什么
以i位置为结尾的等差数列,也就是说i位置必须和i-1,i-2位置构成等差数列,否则前面的数再多也没有意义
也就是分为两种情况:
1. c-b==b-a(和前两个位置构成等差) 2. c-b != b-a(和前两个位置不构成等差)

dp[i] = c-b == b-a ? dp[i-1] +1 : 0
3.初始化
保证填表的时候不越界
因为状态转移方程要用到前两个位置的值
所以初始化dp表里前连个位置
dp[0] = 0;dp[1] = 0;
4.填表顺序
为了填写当前状态的时候,所需要的状态已经计算过了
从左往右
5.返回值
题目要求+状态表示
dp表内所有元素的和
6.代码
class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& nums) {
        int n = nums.size();
        //1.创建dp表
        vector<int> dp(n);
        //2.初始化
        //3.填表
        for(int i = 2; i < n;i++)
        {
            dp[i] = nums[i] -nums[i-1] ==nums[i-1] -nums[i-2] ? dp[i-1]+ 1: 0;
        }
        //4.返回值
        int sum = 0;
        for(int i = 0;i < n;i++)
        {
            sum += dp[i];
        }
        return sum;
    }
};

















