← 回到文章

迎春舞会之集体舞

【问题描述】 背景 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;
}
最后更新于 2009-09-30 12:17:13