1.LIS
有1...n这n个数的排列,一次移动可以把任一数放任一位置,问至少多少次移动,使成1...n的递增顺序答案说n-LIS
将LIS外的数,移到LIS中合适的位置,一定为使LIS+1
因为移完,那个数的位置有三种可能
1.在LIS某两数之间,LIS+1
2.在LIS之前,或之后,LIS+1
3.与LIS某数位置重合,LIS不变;
因为此处数不相同,所有不会重合。所有LIS会+1
2.集合状态的表达
许多问题问的是从一堆东西里选几个出来,使得什么最优乍一看很容易想到用集合来表示状态
最直接的是用二进制表示,但时间空间都消耗巨大。
还有种是排成一排,看做线性的,从前i个中选
能用于线性的,关系要松些。
比如,最优方案与选择的顺序无关,
或者能够排个序,使得任意i<j,j可以在i之后选,而不影响最优方案,或者说方案更优
恩,有序的感觉。
从最优子结构来理解,前i是前j的子问题,能够保证子问题最优时原问题也最优
上次优化多重背包时就跌这了,认为f[i][j]是f[i][k], k>j, 满足最优子结构的子问题, 实际上不是。
二进制的,经典例子是TSP问题,由于选择的点和其他点之间都有联系,不好排序,说不好谁先走就是好的(也不一定= =),每个点什么时候走,跟周围点都有关,不得不用二进制表示,完全的用集合来看待。