hdu4628枚举子集状压dp

该博客介绍了如何解决HDU4628题目的方法,通过枚举字符串的子集并利用动态规划(DP)求解最少删除次数以消除所有可不连续的回文子串。首先,博主预处理出所有可能的子串状态,并判断其是否为回文。然后初始化DP数组,通过遍历子集状态更新最少删除次数。
摘要由CSDN通过智能技术生成

题目大意:
给一个字符串,每次可以删除一个可不连续回文子串,问最少删几次可以全部删完。

思路:
因为字符串长度最大16,所以可用二进制状态表示, 1表示选取这个字符,0不选,组成一个子串。
先预处理出所有状态,看这个状态是不是回文。
f[i]表示状态i最少几次可以全删完, 初始化f数组INF
f[i] = min{f[i], f[s]+1 } s是i的子集。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
using namespace std;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值