poj-1699-Best Sequence-dfs+子状态

2014-11-24 09:00:29 · 作者: · 浏览: 0

这道题目竟然真的ac了,好神奇啊。

当时算的时间复杂度为O(T*N!),理论值达到7kw。

做法:

预处理dp数组,使得dp[i][j]代表j放在i后面长度的增加值。

然后dfs,dfs的时候要注意,用一个二进制数标记当前状态。

二进制中0代表当前位置已取,1代表当前位置未取。每次查找二进制的子状态。

然后看看哪个位置在子状态消失了。

一定要直接查找子状态。

#include
  
   
#include
   
     #include
    
      #include
     
       using namespace std; char str[31][31]; int dp[31][31]; int vis[31]; int n; int ans; int fc[(1<<21)]; int houji(int x,int y) { int i,j; int len1=strlen(str[x]); int len2=strlen(str[y]); for(i=0;i