hdu 4628 Pieces 集合DP
2013-08-10 22:03
288 查看
给一个长度为 n (<=16) 的字符串,每次可以消去一个 可以不相连的回文串 ,问最少几步消完?
for(int subset = set ; subset >0 ;(--subset)&=set)枚举 set 的子集
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <cstring> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cstdlib> #include <ctime> #include <assert.h> #include <queue> #define REP(i,n) for(int i=0;i<n;i++) #define TR(i,x) for(typeof(x.begin()) i=x.begin();i!=x.end();i++) #define ALLL(x) x.begin(),x.end() #define SORT(x) sort(ALLL(x)) #define CLEAR(x) memset(x,0,sizeof(x)) #define FILLL(x,c) memset(x,c,sizeof(x)) using namespace std; const double EPS = 1e-8; #define LL long long #define pb push_back char in[20]; char tmp[20]; bool t[1<<16]; bool judge(int a){ int idx = 0; int tot = 0; int b =a; while(a){ idx++; if(a&1){ tot ++; tmp[tot] = in[idx]; } a>>=1; } for(int i=1;i<=tot/2;i++){ if(tmp[i] != tmp [tot-i+1]){ return false; } } return true; } int dp[1<<16]; const int inf = 10000; int dfs(int i){ if(dp[i]!= inf)return dp[i]; int set = i; for(int subset = set ; subset >0 ;(--subset)&=set){ if(t[subset]){ dp[i] = min(dp[i],dfs(set^subset)+1); } } return dp[i]; } void solve(){ int len = strlen(in+1); CLEAR(t); for(int i=1;i<(1<<len);i++){ if(judge(i)){ t[i] =1; } } for(int i=0;i<(1<<16);i++){ dp[i] = inf; } dp[0]=0; cout << dfs((1<<len)-1)<<endl;; } int main(){ int t = 0; cin >>t ; while(scanf("%s",in+1),t--){ solve(); } return 0; }
相关文章推荐
- HDU 4628 Pieces(状态压缩dp)
- HDU - 4628:Pieces(状压DP)
- HDU 4628 Pieces (状压DP)
- [kmp+dp] hdu 4628 Pieces
- hdu 4628 Pieces 状态压缩DP
- HDU 4628 Pieces (状压DP)
- HDU 4628 Pieces(状态压缩DP)
- [kmp+dp] hdu 4628 Pieces
- hdu - 4628 - Pieces(状态压缩dp)
- hdu 4628 Pieces(状态压缩+DP,4级)
- hdu 4628 Pieces (状态压缩+二进制枚举+dp)
- hdu 4628 Pieces(状压dp)
- HDU-4628 Pieces 搜索 | DP
- hdu 4628 Pieces (状态压缩dp)
- HDU 4628 Pieces(DP + 状态压缩)
- hdu 4628 Pieces(状态压缩DP)
- hdu 4628 Pieces 状态压缩DP
- hdu 4628 - Pieces(压缩dp)
- hdu 4628 Pieces (状态压缩dp)
- HDU-4628 Pieces 如压力DP