hdu 6103 Kirinriki
来源:互联网 发布:c语言线程同算法 编辑:程序博客网 时间:2024/06/05 17:05
链接
题意:
给你一个整数n和字符串str,现在让你在str中找出两个连续的字串计算两个字串的距离。距离 ,求满足在dis不超过n的状态下,n的最大值。
分析:
用dp[i][j]数组记录字串i-j的dis, 前半部分是A串,后半部分是B串,然后枚举n,二分查找。
代码:
#include <bits/stdc++.h>using namespace std;const int maxn = 5*1e3+10;short dp[maxn][maxn] , n , len;char s[maxn];bool is_ok(int mid){ int i , j; for(i=0; i<len; i++) { int j = i + mid - 1; for(int k=j+1; k+mid-1<len; k++) { if(dp[i][k+mid-1] - dp[j+1][k-1] <= n) return true; } } return false;}int main(){ int t , i , j; scanf("%d", &t); while(t--) { scanf("%d", &n); scanf(" %s", s); len = strlen(s); for(i=0; i<len-1; i++) { dp[i][i] = 0; dp[i][i+1] = abs(s[i]-s[i+1]); } for(int k=3; k<=len; k++) { for(i=0; i+k-1<len; i++) { j = i+k-1; dp[i][j] = dp[i+1][j-1] + abs(s[i]-s[j]); } } int l = 0 , r = len; int ans = 0 , mid; while(l <= r) { int mid = (l + r) / 2; if(is_ok(mid)) l = mid + 1 , ans = mid; else r = mid - 1; } printf("%d\n", ans); } return 0;}
阅读全文
0 0
- HDU 6103 Kirinriki
- HDU 6103 Kirinriki
- HDU 6103 Kirinriki
- HDU 6103 Kirinriki
- hdu 6103 -Kirinriki
- hdu 6103 Kirinriki
- HDU 6103 Kirinriki 【dp】
- hdu 6103 Kirinriki
- HDU 6103 Kirinriki
- Kirinriki(HDU 6103)
- HDU-6103 Kirinriki
- hdu 6103 Kirinriki
- HDU 6103Kirinriki
- hdu--6103--Kirinriki
- 【思维】hdu 6103 Kirinriki
- HDU 6103 Kirinriki
- HDU 6103-Kirinriki
- HDU 6103 Kirinriki
- MD5加密
- cad转pdf等常见格式进行转换
- Linux(C/C++)下的文件操作open,fopen
- 做到这一点,你也可以成为优秀的程序员
- webstorm的快捷键大全
- hdu 6103 Kirinriki
- linux通信 进程间通信有哪几种方式?
- SDRAM控制模块图
- restful理解
- 自行准备深度学习训练数据
- 数据结构学习笔记2
- 2015 ACM Amman Collegiate Programming Contest L.Alternating StringsII
- Hadoop新版本中map任务待处理split大小的计算方法
- radosgw 各个pool作用及联系