思路
题意是一个人要参加不同的晚会需要穿不同的衣服,衣服可以意见套一件然后再反序脱掉,问最少需要多少件衣服。容易想到使用区间dp。一开始想的状态转移方程是当两端不匹配时,dp[l][r]=min(dp[l+1][r],dp[l][r-1])+1。当两端匹配时,dp[l][r]=dp[l+1][r-1]+1。一开始还觉得没问题,结果得了WA。发现不能只考虑两端的复用,要考虑第一件衣服和中间某件(假设为k)的复用,因为有可能在中间复用会使得dp[l][r]更小。
状态转移方程:
对于两端不匹配的情况:dp[l][r]=min(dp[l+1][r],dp[l][r-1])+1;
对于l-r范围中我们枚举k,如果cloth[l]==cloth[k],代表我们考虑中间第k件复用:dp[l][r]=min(dp[l][r],dp[l][k-1]+dp[k+1][r]);
代码
1 |
|