UVA
来源:互联网 发布:react.js 教程 pdf 编辑:程序博客网 时间:2024/06/05 15:10
思路;用dp[i][j]表示到第i组末尾为字母j块的最小值,那么dp[i][j] = min(dp[i][j], dp[i-1][l] + f[i] - 1), 第i组和第i-1组含有字母l,并且l和j不同,否则dp[i][j] = min(dp[i][j],dp[i-1][l] + f[i]).f[i]为每组的不同字母数。
#include<cstdio>#include<set>#include<algorithm>#include<cstring>#include<iostream>#include<map>#include<queue>#include<vector>#include<string>#include<sstream>#include<cmath>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 100 + 20;const double EPS = 1e-5;const int mod = 1e8 + 7;typedef unsigned long long ull;typedef long long ll;int dx[] = {0, 0, -1, 1, -1, -1, 1, 1};int dy[] = {1, -1, 0, 0, -1, 1, -1, 1};int a, b;int gcd(int x, int y){ return !y ? x : gcd(y, x % y);}int k;char s[1010];int f[1010];int d[1010][27];int dp[1010][27];int main(){ int T; scanf("%d", &T); while(T--){ scanf("%d%s", &k, s); int len = strlen(s); memset(f, 0, sizeof f); memset(dp, INF, sizeof dp); memset(d, 0, sizeof d); int t = 0; int n = len / k; for(int i = 1; i <= len / k; ++i){ int cnt = 0; for(; t < i * k; ++t){ int c = s[t] - 'a'; if(d[i][c] == 0){ cnt++; d[i][c]++; } else d[i][c]++; } f[i] = cnt; } for(int i = 0; i < 26; ++i) dp[0][i] = 0; for(int i = 1; i <= n; ++i){ for(int j = 0; j < 26; ++j){ for(int l = 0; l < 26; ++l){ if(d[i][l] && d[i - 1][l] && (l != j || l == j && f[i] == 1)){ dp[i][j] = min(dp[i][j], dp[i - 1][l] + f[i] - 1); } else dp[i][j] = min(dp[i][j], dp[i - 1][l] + f[i]); } } } int ans = INF; for(int i = 0; i < 26; ++i) ans = min(ans ,dp[n][i]); printf("%d\n", ans); }}/*25 helloworld7 thefewestflops*/
阅读全文
1 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UML学习笔记之状态图
- 安装VirtualBox的时候遇到的问题
- Vue自定义动画和animate.css使用
- css 省略号代码
- 教你实现GPUImage【OpenGL渲染原理】
- UVA
- iOS通过SocketRocket实现websocket的即时聊天
- Python: PS 滤镜--高反差保留 (High pass)
- HttpClient发送get post请求和数据解析
- memcached存储大数据的问题
- Java线程同步使用
- Ajax/Json数据的遍历
- 简单易用的标签列表界面(宝宝用了都不哭了 )
- 盘点国内外几款免费好用的远程桌面工具