題目鏈接:hdu 4572 Bottles Arrangement
題目大意:給定m和n,表示有m種高度的瓶子,每種瓶子n個,現在將n*m個瓶子排列成一個m行n列的矩陣,要求:1,每一列沒有相同高度的瓶子;2,每一行相鄰的兩個瓶子的高度差的絕對值不大於1。然後所有滿足條件的矩陣有一個值,即為每一行所有元素之和的最大值。要求構造出一個矩陣,使得該值最小。
解題思路:我是從最大的瓶子開始考慮的,除非放在最左或是最右,否則一個最大號的瓶子要消耗兩個第二大的瓶子(條件1),以7為例,
7 6 ...
6 7 7 6...
4 5 6 7 7 6
2 3 4 5 6 7
這樣的方法是最優的,而且最大值肯定為中間那行。
#include#include int main () { int m, n; while (scanf("%d%d", &m, &n) == 2) { int t = m - n/2 + 1; int s = (t + m) * (n/2); printf("%d\n", s + t - 1); } return 0; }