# Thread: CEOI 1996 example solution

1. ## CEOI 1996 example solution

I would like to now the solution. I wrote a heuristic algorithm, but it is not write out the optimal solutions.

Here is the example:
Click!

Cutting rectangle.

2. You are given a rectangle whose side lengths are integer numbers. You want to cut the rectangle into the smallest number of squares, whose side lengths are also integer numbers. Cutting can be performed with a cutting machine that can cut only from side to side across, parallel with one side of the rectangle. Obtained rectangles are cut separately.
Input Data

The input file contains two positive integers in the first line: the lengths of the sides of the rectangle. Each side of the rectangle is at least 1 and at most 100.
Output Data

The output file consist of one line on which your program should write the number of squares resulting from an optimal cutting.
Example

CUTS.IN
5 6

CUTS.OUT
5
Apart from the fact that the question is ambiguous, what's your problem?

3. > Here is the example:

4. My first solution is divide with the little side of the rectangle, but that solution is not the optimal result. I think i have ti make it with dynamic programming with an array, but I don't know how to start it. I would like to know tha recursive algorithm which I have to use to fill the array with the solution. Than I search the optimal solution in the array...

here is the heuristic algorithm (but this is not the optima solutionl) i wrote it in Java:
i use an array to store the squares size and number of pieces.
Code:
```import java.util.*;
import java.io.*;

private static int A;
private static int B;
private static int F;
private static int C=1;
private static int[] D;
private static int[] E;

private static void ReadIn() throws IOException{
StringTokenizer line;
A = Integer.parseInt(line.nextToken());
B = Integer.parseInt(line.nextToken());
in.close();
D=new int[100];
E=new int[100];
}
private static void Divide(int x, int y){
if(x>y){F=x; x=y; y=F;}
if(x==y){D[C]=1; E[C]=x;}
else
if((y%x) != 0){
D[C]=y/x;
E[C]=x;
C++;
Divide(y%x,x);
}
else
{D[C]=y/x; E[C]=x; }
}

private static void POut() throws IOException{
PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter("out.txt")));
int m=0;
for(int i=1; i<=C; i++){
m +=D[i];
}
ki.println(m);
for(int i=0; i<C; i++){
ki.println(E[C-i]+" "+D[C-i]);
}
out.close();
}

public static void main(String[] args)throws Exception{