UVA 11552 - Fewest Flops

一个字符串,字符串每 k 个当作一组,组中的字符顺序能够重组。问经过重组后改字符串能够编程最少由多少块字符组成。连续的一段字符被称为块。

dp[i][j] 表式第i组以字符j结尾的最少块数。

那么我们考虑加入一组后能够降低块数的情况。

1):上一组的结尾在这一组里找得到相同的字符,而且该字符不作为当前块的结尾。

假设要作为结尾的话要把该字符所在的块拆开。所以然并卵。

2):当前组仅仅有一种字符,而且和上一组的结尾相同。

这两种情况都能够使块数减一

dp[i][s] = min(dp[i-1][t] + cnt[i] - flag);flag表示是否满足上述两种情况。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const int INF = 999999999; char s[1005]; int c[1005][26];
int dp[1005][26];
int _cnt[1005];
int k, len; int main() { // freopen("out.txt", "w", stdout);
int Tcase;
scanf ("%d", &Tcase);
for (; Tcase>0; --Tcase) {
scanf ("%d%s", &k, s);
len = strlen(s); int _c=-1;
memset(c, 0, sizeof(c));
memset(_cnt, 0, sizeof(_cnt));
while (_c<len/k) {
for (int j=0; j<k; j++) {
if (c[_c][s[_c*k+j]-'a'] == 0) _cnt[_c]++;
c[_c][s[_c*k+j]-'a']++;
}
_c++;
} for (int i=0; i<=_c; i++) {
for(int j=0; j<26; j++) {
dp[i][j] = INF;
}
} for (int i=0; i<26; i++) {
if (c[0][i] != 0) dp[0][i] = _cnt[0];
else dp[0][i] = INF;
} for (int i=1; i<_c; i++) {
for (int s=0; s<26; s++) {
for (int t=0; t<26; t++) {
if (c[i][s] == 0) continue;
if (c[i-1][t] == 0) continue; if (c[i][t] != 0 && (_cnt[i] == 1 || s != t)) {
dp[i][s] = min(dp[i][s], dp[i-1][t] + _cnt[i] - 1);// cout << s << " " << t << endl;
} else {
dp[i][s] = min(dp[i][s], dp[i-1][t] + _cnt[i]);
}
}
}
} int ans = INF;
for (int i=0; i<26; i++) {
ans = min(ans, dp[_c-1][i]);
}
printf ("%d\n", ans);
} return 0;
}

uva 11552 dp的更多相关文章

  1. UVA - 11552 DP 划分

    每k个字符划分一个组,该组内字符顺序可以任意重排,定义块为最长的连续的字符子串,求长度为m*k的字符串中最少的块的数目 设\(dp[i][j]\):前\(i\)组中第\(i\)组结尾为\(j\)的最优 ...

  2. UVa 11552 DP Fewest Flops

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

  3. 多维DP UVA 11552 Fewest Flop

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

  4. uva 11552 Fewest Flops 线性dp

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

  5. UVA 11552 四 Fewest Flops

    Fewest Flops Time Limit:2000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Statu ...

  6. UVa 11552 Fewest Flops (DP)

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

  7. UVA 11552 Fewest Flops(区间dp)

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

  8. UVA 11552 序列划分模型 状态设计DP

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

  9. uva 1401 dp+Trie

    http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&page=show_problem& ...

随机推荐

  1. 1、DOS基本命令

    命令dir能给列出当前目录下面的所有文件.程序和子目录.所有目录(Windows 中称为文件夹)的目录名前面都有一个<DIR>标记.文件和程序名前面显示有这些文件和程序的大小. 想说的是, ...

  2. headroom.js使用

    为页面顶部多留些空间.在不需要页头时将其隐藏 需要添加的css代码 .headroom { transition: transform 200ms linear; } .headroom--pinne ...

  3. git reset作用

    git reset: 1. 文件从暂存区回退到工作区,撤销add 2. 版本回退  一:文件从暂存区回退到工作区,撤销add 如果想取消某个add的文件,可以使用该命令来进行撤销操作 撤消add:gi ...

  4. dbcp数据源配置

    <bean id="dbcpDataSource"  class="org.apache.commons.dbcp.BasicDataSource" de ...

  5. MaskRCNN:三大基础结构DeepMask、SharpMask、MultiPathNet

    MaskXRCnn俨然成为一个现阶段最成功的图像检测分割网络,关于MaskXRCnn的介绍,需要从MaskRCNN看起. 当然一个煽情的介绍可见:何恺明团队推出Mask^X R-CNN,将实例分割扩展 ...

  6. nginx--提供一键安装脚本

    nginx特点 基于进程池实现的fastcgi 单一进程即可实现处理上千的连接 易于扩展的插件系统 安装篇 *下载源码 curl -O http://nginx.org/download/nginx- ...

  7. Java_数组1_16.5.12

    声明整型数组a: int[] a; 这时,只声明了变量a,还应该使用new运算符创建数组: int[] a=new int [100];(数组长度不要求是一个常量:new int[n]会创建一个长度为 ...

  8. 新安装数据库sqlserver2008r2,使用javaweb连接不上问题处理

    鼠标右键[计算机]-->[管理],打开界面如下: 选择自己数据库的实例名: 选择TCP/IP:右键[属性],将所有TCP动态端口的[0]删掉,TCP端口设为1433:重启服务,即可连接. PS: ...

  9. 实战:tcp链接rst场景tcpdump分析

    RST为重置报文段,它会导致TCP连接的快速拆迁,且不需要ack进行确认. 1.针对不存在的端口的连请求 客户端: #include <unistd.h> #include <sys ...

  10. [Git]Please make sure you have the correct access rights and the repository exists

    这个问题是这样,需要在已有github账号的A机器上,再创建一个github账号,新账号创建完毕,将代码通过机器A push上之后,再另一台机器B,clone 这个项目时报出了如下错误: Permis ...