Fewest Flops

Time Limit:2000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu

 #include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
int T;
int k,numk;
int i,j;
char a[];
int num[],q[][],dp[][];
scanf("%d",&T);
while(T--)
{
memset(num,,sizeof(num));
memset(q,,sizeof(q));
memset(dp,,sizeof(dp));
scanf("%d",&k);
scanf("%s",a);
int l=strlen(a);
numk=l/k;
if(l%k!=)
numk++;
for(i=;i<=numk;i++)
{
for(j=(i-)*k;j<=i*k- && j<l;j++)
{
int o=a[j]-'a'+;
if(q[i][o]==)
{
num[i]++;
q[i][o]=;
}
}
} for(i=;i<=;i++)
{
if(q[][i]==)
dp[][i]=num[];
} for(i=;i<=numk;i++)
{
for(j=;j<=;j++)
{
if(q[i][j]==)
{
if(q[i-][j]==)
{
dp[i][j]=dp[i-][j]+num[i];
if(num[i-]==)
dp[i][j]--;
else
{
for(int u=;u<=;u++)
{
if(u!=j && q[i-][u]==)
dp[i][j]=min(dp[i][j],dp[i-][u]+num[i]-);
}
}
}
else
{
dp[i][j]=;
for(int u=;u<=;u++)
{
if(q[i-][u]==)
dp[i][j]=min(dp[i][j],dp[i-][u]+num[i]);
}
}
}
}
} int ans=;
for(int i=;i<=;i++)
{
if(q[numk][i]== && dp[numk][i]<ans)
ans=dp[numk][i];
} printf("%d\n",ans);
}
return ;
}

UVA 11552 四 Fewest Flops的更多相关文章

  1. UVa 11552 DP Fewest Flops

    题解 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ...

  2. uva 11552 Fewest Flops 线性dp

    // uva 11552 Fewest Flops // // 二维线性dp // // 首先,在该块必须是相同的来信.首先记录每块有很多种书 // 称为是counts[i]; // // 订购f[i ...

  3. 多维DP UVA 11552 Fewest Flop

    题目传送门 /* 题意:将子符串分成k组,每组的字符顺序任意,问改变后的字符串最少有多少块 三维DP:可以知道,每一组的最少块是确定的,问题就在于组与组之间可能会合并块,总块数会-1. dp[i][j ...

  4. uva 11552 dp

    UVA 11552 - Fewest Flops 一个字符串,字符串每 k 个当作一组,组中的字符顺序能够重组.问经过重组后改字符串能够编程最少由多少块字符组成.连续的一段字符被称为块. dp[i][ ...

  5. UVa 11552 Fewest Flops (DP)

    题意:给一个字符串,把它分为k块,每一块里面的字母可以任意的排序.最终字符串, 连续的一样的字母算作一个chunk,问总chunks最少是多少? 析:dp[i][j] 表示第 i 个块,第 j 位在末 ...

  6. UVA 11552 Fewest Flops(区间dp)

    一个区间一个区间的考虑,当前区间的决策只和上一次的末尾有关,考虑转移的时候先统计当前区间出现过的字母以及种数ct 枚举上一个区间的末尾标号j,规定小于INF为合法状态,确定j之后看j有没有在当前的区间 ...

  7. UVA - 11552 Fewest Flops

    传送门: 题目大意:给你一个字符串,可以平均分成很多段,每一段之内的元素可以任意排序,最后再按原来的顺序把每一段拼起来,问最少的块数.(块:连续相同的一段字符成为一个块) 题解: 首先我们可以发现,每 ...

  8. UVA11552:Fewest Flops

    发现如果只有一块就是种类的数目,也就是同种放在一起, 再考虑多块,如果违背的上面的规律,可以发现不会更优, 于是问题就是求在满足同种类放在一起的前提下,尽量使得相邻块的两端一模一样 然后dp一下就可以 ...

  9. UVa 11552 最小的块数(序列划分模型:状态设计)

    https://vjudge.net/problem/UVA-11552 题意:输入一个正整数k和字符串S,字符串的长度保证为k的倍数.把S的字符按照从左到右的顺序每k个分成一组,每组之间可以任意重排 ...

随机推荐

  1. 【fedora】设置fedora系统

    1.安装自动选择最快源的插件fastestmirror: #sudo yum -y install axel yum-plugin-fastestmirror && sudo yum ...

  2. NOIP200503采药

                          NOIP200503采药 [问题描述] 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质, ...

  3. js编写规范

    JavaScript编码规范 Bug----33条 1. 不要使用’==’和’!=’,使用’===’和’!==’替代 等级:Major 原因:==和!=在判断值相等前会判断类型是否相等.这容易因为类型 ...

  4. EF数据库连接时候出错

    users: EntityType: EntitySet 'users' is based on type 'UserModel' that has no keys defined. TreeLaye ...

  5. ubuntu硬件配置查看命令

    主板:sudo dmidecode |grep -A16 "System Information$"

  6. JVM学习笔记(二)------Java代码编译和执行的整个过程【转】

    转自:http://blog.csdn.net/cutesource/article/details/5904542 版权声明:本文为博主原创文章,未经博主允许不得转载. Java代码编译是由Java ...

  7. javap(反汇编命令)详解【转】

    转自:http://blog.csdn.net/hudashi/article/details/7062668 javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码.通过它,我们 ...

  8. Linux异步IO【转】

    转自:http://blog.chinaunix.net/uid-24567872-id-87676.html Linux® 中最常用的输入/输出(I/O)模型是同步 I/O.在这个模型中,当请求发出 ...

  9. 华硕本本重装系统后出现can not open file c:\RECOVERY.DAT

    华硕本本重装系统后出现can not open file c:\RECOVERY.DAT很多网友会觉得困惑,不知道为什么会这样,下面我就为大家来解决这个问题,方法一: 这个问题就出在华硕自带系统都是装 ...

  10. linux系统修改CST时区

    ================================================= [root@tzyyserveryg ~]# date -R Fri, 28 Nov 2014 08 ...