这个题目刚看到还真不好下手,把一个是 k的倍数的长度的字符串分成len/k块,每块是k个字母,每个块可以重新组合,最后使得整个序列的相同字母尽量在一起,也就是说,最后会把序列从前往后扫,相连的相同字母算一个块,最后使得所有块最少。

这个其实是个从前往后扫的问题,只要枚举最后一位是哪个,比如i-1块的最后一位是w,且w在第i块中确实有,则 f[i][j]=min(本身,f[i-1][w]+chunks[i]-1), chunks[i]表示该块有本身有多少个小块。

#include <iostream>
#include <cstdio>
#include <cstring>
#define INF 1<<30
char ch[];
int rec[];
int f[][];
int vis[][];
int k;
int min(int a,int b)
{
if (a<b) return a;
return b;
}
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
scanf("%d %s",&k,ch);
int len=strlen(ch);
memset(rec,,sizeof rec);
memset(vis,,sizeof vis);
memset(f,,sizeof f);
for (int i=;i<len/k;i++)
{
for (int j=;j<k;j++)
{
f[i][j]=INF;
}
for (int j=i*k;j<(i+)*k;j++)
{
vis[i][ch[j]]++;
}
for (int j='a';j<='z';j++)
{
if (vis[i][j])
rec[i]++; //计算chunks
}
}
for (int i=;i<k;i++)
{
f[][i]=rec[]; //预处理第0位
}
for (int i=;i<len/k;i++)
{
for (int j=;j<k;j++)
{
for (int w=;w<k;w++)
{
int rear=i*k+j;
int pre=(i-)*k+w;
if (vis[i][ch[pre]] &&(rec[i]== || ch[pre]!=ch[rear])) //如果第i位有第i-1位的该字母,则,除非第i位的chuanks=1,否则就必须第i位的最后一位不为该字母(该字母要放在序列头,则满足该条件)
{
f[i][j]=min(f[i][j],f[i-][w]+rec[i]-);
}
else
{
f[i][j]=min(f[i][j],f[i-][w]+rec[i]);
}
}
}
}
int ans=INF;
for (int i=;i<k;i++)
{
ans=min(ans,f[len/k-][i]);
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
  2. ACM-JAVA基础
  3. php示例代码使用mysql_fetch_assoc函数
  4. easyui DataGrid 工具类之 列属性class
  5. css3多列显示
  6. nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖
  7. DB天气app冲刺二阶段第七天
  8. SignalR发布后不能生成signalr/hubs
  9. 【转】Ubuntu10.04上编译Android源码(Build Android source in Ubuntu10.04 Platform)
  10. div 宽高相等2种实现方式
  11. 【算法系列学习】HDU 5527 Too Rich贪心
  12. c++ 如何获取多线程的返回值?
  13. 如何编写高质量JavaScript代码
  14. # xrdp 在linux deploy 折腾记录
  15. pojo类自动生成序列化ID
  16. HTTPS笔记:使用 SSLEngine 为 aioserver 服务器提供 SSL 访问支持
  17. 记一次mysql事故---纪念逝去的一上午
  18. 9、后记:公司管理经验总结 - CEO之公司管理经验谈
  19. 六、spring boot 1.5.4 配置多数据源
  20. Map与实体之间转换

热门文章

  1. 028、Java中的关系运算符
  2. BFPRT(中位数的中位数算法)
  3. Java 类加载器(ClassLoader)
  4. Mysql 模糊查询 转义字符
  5. html5游戏的横屏问题
  6. springboot启动时候的一个注意事项——不同包下有同样名字的class类
  7. Python 列表/元组/字典总结
  8. Vulkan 之 Synchronization
  9. 掌握这几点,轻松搞定Essay Cohesion写作
  10. HZNU-ACM寒假集训Day12小结 数论入门