计蒜客习题:消除字符串
题目
样例
代码
#include<iostream>
using namespace std;
int n,dp[1<<16+5];
string s;
bool IsPalindrome(int t)
{
int l=0,r=n-1;
while(l<r)
{
while(!(t&(1<<l))) l++;
while(!(t&(1<<r))) r--;
if(s[l]!=s[r]) return 0;
else {l++;r--;}
}
return 1;
}
int main()
{
cin>>s;
n=s.size();
for(int t=1;t<(1<<n);t++)
{
dp[t]=IsPalindrome(t)?1:999999;
for(int i=t;i;i=(i-1)&t)
dp[t]=min(dp[t],dp[i]+dp[t^i]);
}
cout<<dp[(1<<n)-1];
return 0;
}