迎春舞会之集体舞
【问题描述】
背景 Background
HNSDFZ的同学们为了庆祝春节,准备排练一场舞会。
【描述 Description 】
表演者排成n排,构成一个向前的正三角形(在屏幕上,即向下)。而就每个人,他有可能正面朝前(小的向前正三角形)、或向后三角形(小的向后正三角形)。
然而这些人在服装上有明显区别——一部分穿冬季校服,其他的穿夏季校服。
现在给出每个人的着衣情况,请你求穿夏季校服的同学所构成的最大正三角形,输出所含人数。
输入格式 Input Format
第一排为n。
接下来n排,第i排有2*i-1个有效字符(‘#’或‘-’,分别表示此同学穿冬季校服或穿夏季校服)。输入文件中出现空格,且空格只是为了保持整个三角形的形状。
【输出格式 Output Format】
输出人数。
【样例输入 Sample Input】
5
#-##----#
-----#-
---#-
-#-
-
样例输出 Sample Output
9
注释 Hint
n<=100
【算法分析】
对于三角形有两种情况:
尖向下时:
f1[i][j]+=min(f1[i-1][j-1],f1[i-1][j],f1[i-1][j+1])
尖向上时:
f2[i][j]+=min(f2[i+1][j-1],f2[i+1][j],f2[i+1][j-1])
而且一定要仔细看题目给的三角形
“他有可能正面朝前(小的向前正三角形)、或向后三角形(小的向后正三角形)”
注意几点:
1.尖向上的情况,只能是一行中的偶数个
2.尖向下的情况,只能是一行中的奇数个
代码
#include
#include
#define min(a,b) a max)
max = f[i][k];
}
}
j++;
}
}
printf("%d\n", max * (max * 2 -1 + 1) / 2);
return 0;
}