It is complex enough so that you won't be able to do it in the cart with rules.  The cart rule would probably just charge the amount stored in a session variable and you would need custom code to loop through the cart and determine package sizes and rates and store the result in the session.  
I think it makes sense to simplify it in any way that is acceptable to your client.

 















