对DP的误解

我的状态定义是:定义f(x)=A和B中长度为x的子序列的末尾
这里确实把问题规模变小了,也有了子问题,也可以从f(x-1)转移出f(x)。
但有两个问题:
我不知道最终答案存储在哪个状态里。
f(x)的获取依旧不明朗。
关于2,我的思考过程是这样的:当x=1的时候,去寻找A跟B中第一个相等的元素就行了。当x=2,就需要从x=1的情况下,从第一个相等元素的位置往后遍历,但是这样的话,可能性就很多了,固定A的元素去遍历B,或者固定B去遍历A,哪一个可以得到最优结果,在这种状态定义下并不能判断。而且,x=1的情况,未必是包含在最优路径中的。
怎么想怎么难受,而且用数组来存储一个二维数组也很奇怪。
其实我的问题是:不能用最终答案来定义状态,因为这样相当于是把问题复读了一遍。
动态规划的本质是把题目给出的信息做各种变形,从而更容易与最终答案连接,所以绝对不能用答案定义状态,用终点连接终点,这样是没有意义的。
状态的定义一定要基于题目给出的信息,这一点首先明确了;其次是状态的转移,一定要能够明确的用几种情况概括完所有可能的答案,如果不能,说明状态定义有问题。
正面例子:

还是很抽象,第一种情况好理解,相等说明长度+1,答案更优了,没有疑问;但是第二种呢?说的是跳过,我的描述是把前面得到的最优答案往后延续,外层循环是mxn的复杂度,每对元素都会访问到,就是说哪怕刨开DP,其实也能够得到所有情况了,DP的角色只是存储中间信息,并没有把问题本身变简单。
举个例子:
A=[1,7,7,7,7,7] B=[0,0,0,0,1,0,7]
两个1隔了很远,状态转移只转移相邻的状态,那[1]这个子序列不就跳过了吗,直觉上我是这么觉得的。哦,对了,i跟j未必是相等的啊,我老是觉得i=j,然后做状态转移,但是i≠j,换句话说[1]这个子序列会好好保存下来,并且后面如果没有更长的序列,这个值会保留。
这样就没问题了。有一点想通了,感觉自己对于最优子结构这一点还是缺少理解。
果然,看了那么多题解,也做了一些DP题目,完全没找到什么共性。
背后的原因是写题解的人。假如你要教一个人怎么拿起杯子,你不会强调每根手指怎么用力,因为这些已经内化到你的潜意识里了,你自己也不知道怎么用力。
就像我会用最终问题定义状态一样,习惯了DP的人根本不会这么做,也不理解为什么会有人这么做,因为用题目给出的信息来定义状态,对于这些人来说是理所当然的。
最终,还是只能依靠自己的思考,把一些难以叙述的问题找出来。