uva11552
2024-08-25 09:43:47
将字符串分为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 ;
}
最新文章
- 微信小程序-视图事件
- gvim配置
- C#:MapControl基本操作代码整理
- VLAN系列
- Linux安装Team Service Agent
- Log4j实现对Java日志的配置全攻略
- OpenCV中OpenCL模块函数
- C#。5 函数 类
- java--实例成员 &; 静态成员
- SQL Server XML数据解析
- BeanUtils 读取数据
- window.open打开新窗体并用post方式传参
- C#工具:汉字转拼音帮助类
- go-001[常用命令]
- linux shell 数组建立及使用技巧
- redis CentOS6.5安装及集群部署
- linux 资料
- setTimeout()和setInterval()的区别
- 嵌入式驱动开发只设备数---dts
- CentOS7安装OpenStack(Rocky版)-07.安装horizon服务组件(控制节点dashboard)
热门文章
- XXXcannot be resolved to a type
- Junit的异常测试
- Python3 tkinter基础 Frame bind 敲击键盘事件 将按键打印到console中
- 【ContextLoaderListener】Web项目启动报错java.lang.ClassNotFoundException: ContextLoaderListener
- 【转载】SeleniumIDE入门
- A Simple Note on ";P4FPGA: A Rapid Prototyping Framework for P4";
- C#深入多线程
- 登陆ArcGIS Server Manager时一直显示”请稍后……”
- React Native的键盘遮挡问题(input/webview里)
- @Value(";#{}";)与@Value(";${}";)的区别以及用法