急!!等腰直角三角形计数问题
pascal吧
全部回复
仅看楼主
level 1
pascal蛋疼 楼主
等腰直角三角形计数问题
问题描述:
一个由大写字母组成的方阵里面可能包含一些等腰直角三角形。你的任务是写一个程序来统计方阵中由各种字母组成的等腰直角三角形的数目,以及等腰直角三角形的总数。方阵中的等腰直角三角形只有下面两种情况:
(1) 两条直角边分别跟方阵的边平行,例如:
A A A B
A A B B
A B B B
(2) 等腰直角三角形的斜边与方阵的边平行,例如:
A B
A A A B B
A A A A A B B B
B B
B
每个等腰直角三角形都不能少于3个字母。
输入格式:
输入文件名位triangle.in
文件的第一行是一个整数N(0<N<=100), 接下来总共有N行,每行有N个大写字母,描述的是一个N*N的大写字母方阵。行首与行末没有多余的空格。
输出格式:
输出文件名为triangle.out
第一行输出方阵中总共有多少个等腰直角三角形。然后对方阵中出现的每个字母,求出由它所组成的等腰直角三角形的个数,并按照字典顺序逐行输出。
输入输出样例:
输 入
输 出
3
AAB
ABB
BBC
4
A 1
B 3
C 0
4
AABB
ABBB
BBBB
BBBB
51
A 1
B 50
求程序啊!!!!!!!
2011年08月19日 00点08分 1
level 1

方法:DP<?xml:namespace prefix="o" ns="urn:schemas-microsoft-com:office:office"></?xml:namespace>
分析:我们直接考虑下面形状的情况,设f[I,j]表示以(I,j)为直角点的最大边长,f[I,j]=min(f[i-1,j],f[I,j-1])+1(a[I,j]=a[i-1,j]=a[I,j-1])否则f[I,j]=1,如果f[I,j]>1,则a[I,j]对应的数量num[a[I,j]]会增加f[I,j]-1。其他情况都可以通过左右、上下翻转以及旋转后也用该方法来求。
2014年05月23日 04点05分 2
1