This is extremely similar to UVA 278 – Chess but the tricky case is when min = 2. If you write it out on paper you will figure out the optimal placing for the knights.
import java.io.PrintWriter; import java.util.Scanner; /** * * @author Sanchit M. Bhatnagar * @see http://uhunt.felix-halim.net/id/74004 * */ public class P696 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); PrintWriter out = new PrintWriter(System.out); while (sc.hasNext()) { int R = sc.nextInt(); int C = sc.nextInt(); if (R == 0 && C == 0) { break; } int max = Math.max(R, C); int min = Math.min(R, C); if (min == 1) { out.print(max); } else if (min == 2) { if (max < 3) { out.print(min * max); } else if (max == 3) { out.print(4); } else { int tmp = max / 4; int rem = max % 4; out.print(tmp * min * 2 + Math.min(rem, 2) * 2); } } else { int a = max / 2; int b = (max - a); int c = min / 2; int d = (min - c); out.print(Math.max(a * c + b * d, a * d + b * c)); } out.println(" knights may be placed on a " + R + " row " + C + " column board."); } out.close(); sc.close(); } }