Its a very hard one this, if you book in advance you are guaranteed ( virtually) the cabin type you require, the dinner seating time your require etc etc, if you leave it to the last minute you may well get a cheaper price but end up on the wrong dinner time or in an inferior cabin. All I can suggest is that you shop around when booking, ask the operators if nthey can better the price or price match someone else etc. No easy answer to this im afraid.
It's worth paying what you can afford, enjoy the holiday and don't listen to what anyone else paid. |cheapest isn't always bes.