ACM-ACMICPC (AC,动态规划/遍历所有字串,三份代码)
2012-06-13 23:43
471 查看
ACMICPC
Time Limit:1000MS Memory Limit:32768K
http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1021
Time Limit:1000MS Memory Limit:32768K
Description:
大写字母A-Z分别对应整数[-13,12],因此,一个字符串对应了一个整数列。我们把字符串对应的整数列的和称为该字符串的特性值。例如:字符串ACM对应的整数列为{-13,-11,-1},则ACM的特性值为(-13)+(-11)+(-1)=-25;其子串AC的特性值为-24;子串M的特性值为-1。给你一个字符串,请找出该字符串的所有子串的最大特性值。Input:
第一行的正整数 N(1<=N<=1000)表示其后有N组测试数据,每组测试数据都由一个字符串组成。字符串只能由大写字母A-Z组成,且字符串的长度不会超过1000。Output:
输出有N行,每行是一组测试数据的输出结果。Sample Input:
2 ACM ANGRY
Sample Output:
-1 15
http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1021
/* -------------------------------------------------------------------------------- 非动态规划解法: 做法:遍历所有字串,找出最大那个。 时间:297MS 内存:196K -------------------------------------------------------------------------------- */ #include<stdio.h> char szStr[1004] ; int a[1004] ; int main(void) { int i = 0 ; int j = 0 ; int t = 0 ; int n = 0 ; int nMax = -1000 ; scanf("%d",&t) ; getchar() ; while(t-- > 0) { gets(szStr) ; nMax = -1000 ; j = 1 ; i = 0 ; while(szStr[i] != '\0') { a[j++] = szStr[i] - 65 - 13 ; i++ ; } n = j - 1 ; a[0] = 0 ; for(i = 1 ; i <= n ; ++i) { if(a[i] >= nMax) { nMax = a[i] ; } a[i] += a[i-1] ; if(a[i] >= nMax) { nMax = a[i] ; } for(j = 1 ; j < i ; ++j ) { if(a[i] - a[j] >= nMax) { nMax = a[i] - a[j] ; } } } printf("%d\n",nMax) ; } return 0 ; }
/* --------------------------------------- 动态规划解法: 时间:9MS 内存:200K --------------------------------------- */ #include<stdio.h> #define max(x,y) ((x)>(y) ? (x) : (y)) char szStr[1004] ; int a[1004] ; int b[1004] ; int main(void) { int i = 0 ; int j = 0 ; int t = 0 ; int n = 0 ; int nMax = -1000 ; scanf("%d",&t) ; getchar() ; while(t-- > 0) { gets(szStr) ; nMax = -1000 ; j = 1 ; i = 0 ; while(szStr[i] != '\0') { a[j++] = szStr[i] - 65 - 13 ; i++ ; } n = j - 1 ; b[0] = -1000 ; nMax = -1000 ; for(i = 1 ; i <= n ; ++i) { b[i] = max(a[i],b[i-1]+a[i]) ; if(nMax < b[i]) { nMax = b[i] ; } } printf("%d\n",nMax) ; } return 0 ; }
/* -------------------------------------------------------------------------------------- 动态规划解法: 不过,优化了时间和空间复杂度。在时间方面边输入边处理,所以只是遍历一次。 在空间方面因为是边输入边处理,所以不用字符串来保存。 时间:7MS 内存:196K -------------------------------------------------------------------------------------- */ #include<stdio.h> #define max(x,y) ((x)>(y) ? (x) : (y)) int b[1004] ; int main(void) { int i = 0 ; int j = 0 ; int t = 0 ; int n = 0 ; int nMax = -1000 ; int nTemp = 0 ; char chCur = '\0' ; scanf("%d",&t) ; getchar() ; while(t-- > 0) { nMax = -1000 ; b[0] = -1000 ; i = 1 ; while((chCur = getchar()) != '\n') { nTemp = chCur - 65 - 13 ; b[i] = max(nTemp,b[i-1]+nTemp) ; if(nMax < b[i]) { nMax = b[i] ; } i++ ; } printf("%d\n",nMax) ; } return 0 ; }
相关文章推荐
- 本博客所有ACM题目AC代码(持续更新中)
- 在代码隐藏中遍历当前页的所有控件
- php遍历文件夹及其下所有文件的代码
- 2017 ACM-ICPC 亚洲区(青岛赛区)网络赛 HDU 6208 1003 The Dominator of Strings(AC自动机)
- 杭电ACMSteps中Chapter One——Section 3中所有ac代码及解析
- ACM水题-合法字符串 (AC,递归遍历,分情况,代码比较长)
- 【hdu5534】【2015ACM/ICPC亚洲区长春站】Partial Tree 题意&题解&代码
- PHP不用递归遍历目录下所有文件的代码
- Python 遍历子文件和所有子文件夹的代码实例
- (实用篇)PHP不用递归遍历目录下所有文件的代码
- hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online
- C#遍历窗体控件代码,遍历窗体所有按钮控件代码
- 遍历指定目录下的所有目录和文件的php代码
- [代码]ACM-ICPC 2012 Regionals Asia - Changchun A Alice and Bob / ZJU 3655
- 遍历指定目录下的所有目录和文件的php代码
- HOJ 动态规划 AC代码包
- 遍历目录及子目录列出所有文件和文件夹的代码
- 一个可以遍历数组的所有排列的小代码
- 在代码隐藏中遍历当前页的所有控件的方法
- 【hdu 5517】【2015ACM/ICPC亚洲区沈阳站】Triple 题意&题解&代码(C++)