2013多校第三场 --Pieces--状态压缩DP
2013-07-30 19:00
246 查看
题目大意:删除一个字符串里面的回文子串,问最少需要多少次可以删完整个字符串
题解:其实是个蛮简单的题目,比赛完了艾神一点就会了,比赛的时候就是没想到,比赛的时候没想到状态怎么压缩。。还是经验不够。
题解:其实是个蛮简单的题目,比赛完了艾神一点就会了,比赛的时候就是没想到,比赛的时候没想到状态怎么压缩。。还是经验不够。
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define maxn (1<<16) using namespace std; int dp[maxn]; int statu[maxn],nstatu; int n,T,len; char s[20]; int maxStatu; bool check(char *t,int vlen) { int vv=vlen/2; for(int i=0;i<vv;i++)if(t[i]!=t[vlen-i-1])return false; return true; } void init() { scanf("%s",s); memset(dp,0xf,sizeof(dp)); len=strlen(s); maxStatu=1<<len; int vlen; char ts[20]; nstatu=0; for(int i=1;i<maxStatu;i++) { vlen=0; for(int j=0;j<len;j++) { if((1<<j)&i) { ts[vlen++]=s[j]; } } ts[vlen]='\0'; if(check(ts,vlen))statu[nstatu++]=i; } } void solve() { dp[0]=0; for(int j=0;j<nstatu;j++) { int st=statu[j]; for(int i=0;i<maxStatu;i++) { if((i&st)==0) { dp[i|st]=min(dp[i|st],dp[i]+1); } } } printf("%d\n",dp[(1<<len)-1]); } int main() { scanf("%d",&T); while(T--) { init(); solve(); } return 0; }
相关文章推荐
- HDU 4628 Pieces(状态压缩DP)
- hdu 4628 Pieces (状态压缩+二进制枚举+dp)
- HDU 4628 Pieces(状态压缩dp)
- 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
- HDOJ 4628 - Pieces 状态压缩DP..枚举所有子集进行更新
- dp专辑F - Mondriaan's Dream [状态压缩]
- Codevs_P2800 送外卖(状态压缩DP+Floyd)
- ZOJ 2563 Long Dominoes(状态压缩+dp)
- poj1185炮兵布阵结题报告--初步了解--状态压缩dp
- zoj 3471 Most Powerful (状态压缩dp~)
- 哈希算法状态压缩dp vijos 1426
- uva 10817 - Headmaster's Headache ( 状态压缩dp)
- 一道状态压缩DP思想题