uva11552】的更多相关文章

发现如果只有一块就是种类的数目,也就是同种放在一起, 再考虑多块,如果违背的上面的规律,可以发现不会更优, 于是问题就是求在满足同种类放在一起的前提下,尽量使得相邻块的两端一模一样 然后dp一下就可以了 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #define MAXN 1005 using namespace std; int n,k; char s[M…
将字符串分为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 &…
本文出自   http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner  打开 这个专题一共有25题,刷完后对dp的感觉提升了不少. 现把解题报告整理了一下,希望对大家能有帮助. 入门习题 (Exercises: Beginner) UVa11584 Partitioning by Palindromes 入门题目 LA4256 Salesman 入门题目 UVa10534 Wavio Sequence 可以转化…
https://vjudge.net/problem/UVA-11552 题意:输入一个正整数k和字符串S,字符串的长度保证为k的倍数.把S的字符按照从左到右的顺序每k个分成一组,每组之间可以任意重排,但组与组之间的先后顺序应保持不变.你的任务是让重排后的字符串包含尽量少的“块”,其中每个块为连续的相同字母. 思路: 令d[i][j]表示第i组中第j位为末尾时的最小块数. 对于第[i]组,我们首先计算出它的块数,即不同字母的个数. 接下来枚举[i]组中第j个字母作为末尾时的情况,根据第[i-1]…