題意:看那張圖就一清二楚了吧, N個序列首位相連(相同的序列部分),得到最短的總序列。
思路就是:將N個序列首尾相連能重合的長度求粗來。然後DFS枚舉每種首尾相連的情況。
#include#include #include #define N 22 #define INF 0x7fffffff using namespace std; int n,ans; int f[N][N],vis[N],len[N]; char str[N][N]; void get(int x,int y) //f[x][y],將y貼到x後面能減少的最大重復長度 { int i,j,l; for(l=len[y];l>0;l--) //枚舉長度 { int ok=1; for(i=len[x]-l,j=0;i ans) //剪枝~ return ; for(int i=0;i