Data Structures, Algorithms, & Applications in C++
Chapter 7, Exercise 9

(a)
C++ uses the array of arrays representation. When m = 10 and n = 2, we have 1 one-dimensional array of size 10 (the elements of this array are C++ pointers) and 10 one-dimensional arrays of size 2 (the elements of these arrays are integers). So, the total space is
1 x 10 x 4 + 10 x 2 x 4 = 120 bytes.

When a single one-dimensional array is used (i.e., when the elements are mapped using (say) row-major order), the space required is 10 x 2 x 4 = 80 bytes. The ratio is 120 / 80 = 1.5.

For general m and n, the array of arrays representation requires
1 x m x 4 + m x n x 4 = 4mn + 4m bytes.
The one-dimensional mapping takes m x n x 4 = 4mn bytes.

(b)
The ratio is
(4mn + 4m) / (4mn) = 1 + 4/n.
This is maximum when n is least. For a two-dimensional array, n >= 2. So, the maximum value of the ratio is 1 + 4/2 = 3.