uva 11552 DP

来源:互联网 发布:怎样下载打字软件 编辑:程序博客网 时间:2024/06/07 03:01
#include<cstdio>#include<cstring>#include<algorithm>#define INF 0x3f3f3f3fusing namespace std;char str[1010];bool vis[200];int dp[1010][1010];int main(){int T,k;scanf("%d",&T);while(T--){memset(dp,0x3f,sizeof(dp)); scanf("%d%s",&k,str);int len=strlen(str);for(int i=0;i<len/k;i++){int t=0;memset(vis,0,sizeof(vis));for(int j=i*k;j<(i+1)*k;j++)vis[str[j]]=1;for(int j='a';j<='z';j++)if(vis[j])t++;if(i==0){    for(int j=0;j<k;j++)    dp[i][j]=t;    continue;}for(int j=0;j<k;j++){int l=i*k+j;for(int p=0;p<k;p++){int r=(i-1)*k+p;if(vis[str[r]]&&(t==1||str[l]!=str[r]))dp[i][j]=min(dp[i][j],dp[i-1][p]+t-1);elsedp[i][j]=min(dp[i][j],dp[i-1][p]+t);}}}int res=INF;for(int i=0;i<k;i++)res=min(res,dp[len/k-1][i]);printf("%d\n",res);}}