hdu 4614 pieces 状态DP
2013-07-31 16:09
246 查看
题意:给你一个长度小于等于16的字符串,每次可以删除一个回文传,问你最少删除干净的字数。
状态+dp
dp[i] = min(dp[i],dp[j]+dp[j^i]);(j是i的字串);
连接:http://acm.hdu.edu.cn/showproblem.php?pid=4628
代码:
View Code
状态+dp
dp[i] = min(dp[i],dp[j]+dp[j^i]);(j是i的字串);
连接:http://acm.hdu.edu.cn/showproblem.php?pid=4628
代码:
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <stdlib.h> #include <vector> #include <queue> #define loop(s,i,n) for(i = s;i < n;i++) using namespace std; int len,t; char str[20]; int dp[(1<<16)+1]; int judge(int state) { int i; int slen; char s[20]; slen = 0; for(i = 0;i < len;i++) { if(1<<i & state) s[slen++] = str[i]; } for(i = 0;i < slen/2;i++) { if(s[slen-i-1] != s[i]) return 0; } return 1; } int main() { scanf("%d",&t); while(t--) { int i,j; scanf("%s",str); len = strlen(str); dp[0] = 0; for(i = 1;i < (1<<len);i++) { if(judge(i)) dp[i] = 1; else dp[i] = 20; } for(i = 1;i < (1<<len);i++) { for(j = (i-1)&i;j;j = (j-1)&i) { dp[i] = min(dp[i],dp[i^j]+dp[j]); } } printf("%d",dp[(1<<len)-1]); } return 0; }
View Code
相关文章推荐
- 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)
- HDU 4385 Moving Bricks [状态压缩DP]
- HDU 3247 AC自动机 + 状态压缩dp
- [HDU 4336]Card Collection[状态压缩DP][概率DP][容斥原理]
- Hdu-1565 方格取数(1) (状态压缩dp入门题
- hdu 4352 状态压缩+数位DP
- HDU 1693(状态压缩 插头DP)
- hdu-1074 Doing Homework(状态压缩DP)
- hdu 4628 - Pieces(压缩dp)
- HDU 3247 Resource Archiver (AC自己主动机 + BFS + 状态压缩DP)