I am not sure which one is "better". That depends on your perspective. That being said, we are using the first scenario here and these are the reasons.
1) concurrency. When we read the current value, we read it "FOR UPDATE" so that we lock the row. Then we do our increment and update, and the rest of the Unit of Work (UOW). This will prevent concurrent users from trying to increment to the same value.
2) space. There is only one row for each search criteria (in your case BRANCH & YEAR_NO). Table will be smaller.
3) performance. Because of (2) above, we do not need to use the aggregate function MAX, which may read more rows than the one we need.