链接
题意
这里有\(n\)次宴会,每个宴会有一个特定的编号,每个宴会需要一件特定衣服,\(n\)次宴会有顺序,衣服可以套着穿,一件衣服脱下后不能在穿,问最少需要买多少件衣服,如宴会为1、2、1、2,开始买衣服1,然后买衣服2,第三个宴会为1,此时身上是有宴会1的衣服的,不过外面还有一件宴会2的衣服,所以需要脱掉衣服2,第四个宴会为2,此时需要再买一件;
分析
这是一道区间\(dp\)的题目;从左往右考虑,对于一件衣服,可以选择脱与不脱,贪心的考虑肯定是不脱较好,这题需要从右往左进行枚举;
对于区间\(dp\)来说,是枚举区间长度,及起始点的,然后找划分点作为决策;对于区间\([l,r]\)我们需要求它的最少需要购买的衣服,我们此时肯定需要去看\([l+1,r]\)的状态(如看区间\([l+1,r]\)有没有出现\(l\)这件衣服,如果有,我们可能会思考是不是不需要再多购买一件了,类似这样的想法),所以我们就需要在\([l+1,r]\)区间内寻找划分点\(k(a[l]==a[k])\)作为状态转移决策,就有了动态转移方程\(dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j])(a[i]==a[k])\).
代码
1 |
|