将字符串分为len/k块。用dp[i][j]表示第i个块必须以j结尾的最小划分。当第i块没有字符j时,dp[i][j]多计一个。如果当前块只有1种字符,那么就等于dp[i-1][j]。否则对于第i块的所有元素,以它来连接前一块,dp[i][j]=min(dp[i-1][i块中的元素]+i块元素数量-1)。如果第i块中不存在j元素,多计一个。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#include <stack>
#include <bitset>
#define mkp make_pair
using namespace std;
const double EPS=1e-;
typedef long long lon;
const lon SZ=,INF=0x7FFFFFFF,mod=;
int k,len;
char ch[SZ];
int dp[SZ][]; void init()
{
cin>>k>>ch+;
len=strlen(ch+);
int num=len/k;
for(int i=;i<;++i)dp[][i]=;
for(int i=;i<=num;++i)
{
for(int j=;j<;++j)dp[i][j]=INF;
int bg=(i-)*k+,end=i*k;
set<char> st;
for(int j=bg;j<=end;++j)
{
st.insert(ch[j]);
}
if(st.size()==)
{
int cur=*st.begin()-'a';
dp[i][cur]=dp[i-][cur];
for(int j=;j<;++j)
{
if(j!=cur)dp[i][j]=dp[i-][cur]+;
}
}
else
{
for(auto it=st.begin();it!=st.end();++it)
{
int cur=*it-'a';
for(int j=;j<;++j)
{
if(j==cur||st.find(j+'a')==st.end())
{
dp[i][j]=min(dp[i][j],dp[i-][cur]+(int)st.size());
}
else dp[i][j]=min(dp[i][j],dp[i-][cur]+(int)st.size()-);
}
}
}
}
// for(int i=1;i<=num;++i)
// {
// for(int j=0;j<26;++j)
// {
// cout<<dp[i][j]<<" ";
// }cout<<endl;
// }
int minv=*min_element(dp[num],dp[num]+);
cout<<minv<<endl;
} void work()
{ } int main()
{
std::ios::sync_with_stdio();
//freopen("d:\\1.txt","r",stdin);
lon casenum;
cin>>casenum;
//cout<<casenum<<endl;
for(lon time=;time<=casenum;++time)
//for(int time=1;cin>>n>>m,n;++time)
{
init();
work();
}
return ;
}

最新文章

  1. 微信小程序-视图事件
  2. gvim配置
  3. C#:MapControl基本操作代码整理
  4. VLAN系列
  5. Linux安装Team Service Agent
  6. Log4j实现对Java日志的配置全攻略
  7. OpenCV中OpenCL模块函数
  8. C#。5 函数 类
  9. java--实例成员 &amp; 静态成员
  10. SQL Server XML数据解析
  11. BeanUtils 读取数据
  12. window.open打开新窗体并用post方式传参
  13. C#工具:汉字转拼音帮助类
  14. go-001[常用命令]
  15. linux shell 数组建立及使用技巧
  16. redis CentOS6.5安装及集群部署
  17. linux 资料
  18. setTimeout()和setInterval()的区别
  19. 嵌入式驱动开发只设备数---dts
  20. CentOS7安装OpenStack(Rocky版)-07.安装horizon服务组件(控制节点dashboard)

热门文章

  1. XXXcannot be resolved to a type
  2. Junit的异常测试
  3. Python3 tkinter基础 Frame bind 敲击键盘事件 将按键打印到console中
  4. 【ContextLoaderListener】Web项目启动报错java.lang.ClassNotFoundException: ContextLoaderListener
  5. 【转载】SeleniumIDE入门
  6. A Simple Note on &quot;P4FPGA: A Rapid Prototyping Framework for P4&quot;
  7. C#深入多线程
  8. 登陆ArcGIS Server Manager时一直显示”请稍后……”
  9. React Native的键盘遮挡问题(input/webview里)
  10. @Value(&quot;#{}&quot;)与@Value(&quot;${}&quot;)的区别以及用法