博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 11552 Fewest Flops DP
阅读量:5949 次
发布时间:2019-06-19

本文共 918 字,大约阅读时间需要 3 分钟。

题意:给一个正整数k和字符串s,s的长度是k的倍数,把s每k个字符分成一组,没组之间的字符可以任意重排,但组与组之间的顺序保持不变。

任务是让重排后的新字符串s'的块最少,连续相同的字符组成一个块,比如abbbaa有三个块a、bbb、aa。

 

首先每一组子串中相同的字符肯定要放在一起,然后问题就变成怎么排列这些子串中的块。

用dp[i][fa]表示前i组且第i+1组的最左边的字符是fa+'a'的状态能得到的最少的块数

那么状态的转移就是两层循环枚举这个第i组最左边和最右边应该放上什么字符,如果最右边和前一组的最左边一样,那么总块数就是加上(X-1)否则加上X,X表示这一组中字符的种类,也就是这一组中块的数量。

注意当一组中只有一种字符的特殊情况。

 

vector
g[1010];int n;int dp[1010][27];int f(int k,int fa){ if(dp[k][fa]>=0)return dp[k][fa]; if(k==0)return 0; vector
&ans=g[k]; int minn=INF; for(int i=0;i
1?1:0)); } } return dp[k][fa]=minn;}int main(){ int t; scanf("%d",&t); for(int ca=1;ca<=t;ca++) { int k; char s[1100]; scanf("%d%s",&k,s); n=0; for(int i=0;s[i]!='\0';i+=k) { char str[1100]; for(int j=i;j
View Code

 

 

转载于:https://www.cnblogs.com/BMan/p/3250998.html

你可能感兴趣的文章
PhoneGap入门经典——理解PhoneGap应用程序基础
查看>>
2016OSC源创会年终盛典-架构与数据专场-张千明
查看>>
nginx实现rtmp,flv,mp4流媒体服务器
查看>>
46.tornado绑定域名或者子域名泛域名的处理
查看>>
Elasticsearch 2.2.0 节点发现详解
查看>>
Elasticsearch 2.2.0 插件篇:安装
查看>>
文本过滤--sed 1
查看>>
PHP CURL并发,多线程
查看>>
CentOS 6.5 PYPI本地源制作
查看>>
raspberry 更换阿里源
查看>>
ES 概念及动态索引结构和索引更新机制
查看>>
JavaWeb ---Filter、Servlet
查看>>
django定制自己的admin界面
查看>>
简单计划一下:
查看>>
nodejs 安装环境配置(windows)
查看>>
Eclipse 環境中的 NuttX 編譯和除錯
查看>>
INSTALLING LIGHTTPD on CentOS 6.2
查看>>
子类能否重写父类的静态方法
查看>>
JS正则表达式验证身份证号码
查看>>
wap网站获取访问者手机号PHP类文件
查看>>