题目链接:http://codeforces.com/gym/101343/problem/J
题意:构造一个序列包含所给的N个子序列(N≤15),求构造序列的最短长度。
考虑状态压缩,有2^N种状态,设dp[i][j]表示状态为i,以第j个子序列结尾的最小长度;
状态转移:从以第j个子序列结尾的状态转移到以第k个子序列的状态:
dp[i|(1 << (k-1))][k] = min{dp[i][j]+a[k][0]-num[j][k]} (其中,a[k][0]表示第k个子序列的长度,num[j][k]表示第j个子序列的后缀与第k个子序列的前缀重合部分的长度)
注意:先将被其他子序列包含的子序列删去……
引用自GraceSkyer
感觉这题有包含的情况是个坑啊,另外需要注意的是两串相等的情况,可以把它们特判成两串不包含的情况。
1 |
|