Treantmonks a bit better guidelines. I dont crunch dpr but more like dpr potential. I make no assumptions about AC or saves. ACs generally 14-19 though. CR 23 BBEG AC 18 RAW.
ATK goes from +5 at level 1 to +12-14 at level 20; call it +13.
A foe with 13 (level 1) to 21 AC (level 20) is then hit on a 8+; a 65% hit rate (or ~68% if we model a crit as 8/5 of a hit). 1/Damage d Damage / dAC is then about 7.5%ish.
So we can calculate EHP (HP accounting for accuracy) as roughly HP * (100% + 7.5%*(AC-13-2/5*Level)) =~ HP * (AC/13 - Level/30)
Assuming spell casters target random saves (which is generous to spellcasters; not that generous, as targeting lower saves restricts choice), this corresponds to +8 to their average save from level 1 to level 20.
If we assume an average save of +0 at level 1 (a total save of +6, average save chance of 40%), a similar accuracy requires a total save of +48 at level 20 (average +8) and the same average save chance (assuming a +2 bonus to save DCs and "random" attribute targets).
Magic damage is "save for half" usually on a save, so the impact of saves is smaller. With a baseline 40% save chance you do 80% of base DPR, +1 to +5/-1 to -5 on that you do 73% to 93%, only 2.6% more/less damage per point of saves. And with 6 stats being "targetted randomly", each point of save on a stat is 6 times less important, giving us a (1 + TotalSaves/230 - Level/100) spell EHP multiplier.
This undervalues saves as they also apply conditions, and conditions don't save for half. If we choose to ignore the save for half component it becomes ~8.3% per point of saves (on every stat) instead of ~2.6%. Treating +1 to AC as the same as +1 to all saves has a certian simplicity. We can also treat +/-1 AC and +/-1 all saves to be "worth" the same weight (for EHP).
This gives us EHP =~ HP * (0.5 + AC/25 + Total Saves/150 - Level/30)
where Level/30 reflects "higher level monsters should have higher saves and AC by default".
We can factor out this gamma (with a bit of rounding):
Gamma = (13 + AC + Average Save - 0.8 * Level)
and EHP = HP * Gamma/25
which gives you a "defence factor" number of Gamma, where Gamma of ~25 is "normal" for the monster's level.
If we boost level scaling slightly (equivalent to PCs having +3 weapons and focuses at level 20 and an extra +0.8 DC/ATK from another source, like crit range or whatever), we get:
Gamma = (AC-13 + Average Save - Level)
and EHP = HP * (1+Gamma/25)
(actually for Gamma < 0, you should use HP / (1-Gamma/25), it behaves better for large negative Gammas and the same for small Gammas).
Each monster +1 CR then requires about +1 to AC or +1 to average saves each level to "keep up" with player AC/ATK.
And calculating Gamma for a monster is easy: AC+Average Save - 13 - Level.
Random Monsters at a few CRs: (
bold are positive)
Brown Bear. CR 1, 11 AC, 0.3 average save. Gamma = -1.7
Specter. CR 1, 12 AC, -0.5 average save. Gamma = -2.5
Ghoul. CR 1, 12 AC, -0.2 average save. Gamma = -2.2
Dire Wolf. CR 1, 14 AC, 0.3 average save. Gamma =
0.3
BugBear. CR 1, 16 AC, 0.5 average save. Gamma =
2.5
Ogre. CR 2, 11 AC, -0.2 average save. Gamma = -4.2
Knight. CR 3, 18 AC, 1.8 average save. Gamma =
3.8
OwlBear. CR 3, 13 AC, 0.7 average saves. Gamma = -2.3
Winter Wolf. CR 3, 13 AC, 0.8 average save. Gamma = -2.2
Wight. CR 3, 14 AC, 1.7 average save. Gamma = -0.3
Half-Red Dragon Veteran. CR 5, AC 18, +1 average save, Gamma =
1.0
Gladiator, CR 5, AC 16, 3.5 saves, Gamma =
1.5
Bulette, CR 5, AC 17, 0.2 saves, Gamma = -0.8
Unicorn, CR 5, 12 AC, 2.3 saves, Gamma = -3.7 (-0.7 if we count MR as +3)
Barbed Devil, CR 5, 15 AC, 4.5 saves, Gamma =
1.5 (4.5 if we count MR as +3)
Stone Giant. CR 7, 17 AC, 3.7 average save. Gamma =
0.7
Chain Devil. CR 8, 16 AC, 3.7 average save. Gamma = -1.3
Deva. CR 10, 17 AC, 4.6 average save. Gamma = -1.4 (
+1.6 if we count MR as +3)
Nalfeshnee. CR 13, 18 AC, 6.3 average save. Gamma = -1.7 (+
1.3 if we count MR as +3)
Storm Giant. CR 13, 16 AC, 7.8 save. Gamma = -2.2
Mummy Lord. CR 15, 17 AC, 5.7 save. Gamma = -5.3 (low)
Androsphinx. CR 17, 17 AC, 8 average save. Gamma = -5 (low)
Balor. CR 19, 19 AC, 9 average save. Gamma = -4 (-1 if we count MR as +3)
Ancient Brass Dragon. CR 20, AC 20, 8 average save. Gamma = -5 (low)
Pit Fiend. CR 20, AC 19, 8.7 saves, Gamma = -5.3 (-2.3 with MR)
Solar. CR 21, AC 21, 11.2 saves, Gamma = -1.8 (
1.2 with MR)
Kracken. CR 23, AC 18, 11.2 saves, Gamma = -6.8 (low)
Ancient Gold Dragon. CR 24, AC 22, 10.8 average save. Gamma =
0.8
Tarrasque. CR 30, AC 25, 7.2 saves. Gamma = -11 (-8 with MR) (! very low)
So that isn't a horrible stat. Monsters tend to be in the range -5 to +5. Stuff over level 20 is suspect, as I think they might have stopped scaling AC and saves as much.
Sub-1 CR we can either treat them all as 0 or fractional, or make 1/2 be 0, 1/4 be -1 and 1/8 be -2. Using the negative option:
Bandit CR 1/8 AC 12 0.3 Saves Gamma =
1.3
Guard CR 1/8 AC 16 0.5 Saves Gamma =
5.5 (high)
Giant Rate CR 1/8 AC 12 -1.2 Saves Gamma = -0.2
Zombie. CR 1/4 AC 8 -1.2 Saves Gamma = -5.2 (low)
Boar CR1/4 AC 11 -1 Saves Gamma = -2
Giant Lizard CR 1/4 AC 12 -.5 Saves Gamma = -0.5
Skeleton CR 1/4 AC 13 -0.3 Saves Gamma =
0.7
Wolf CR 1/4 AC 13 -0.2 Saves Gamma =
0.8
Orc CR 1/2 AC 13 0.8 Saves Gamma =
0.8
Thug CR 1/2 AC 11 0.7 Saves Gamma = -1.3
Hobgoblin CR 1/2 AC 18 0.3 Saves Gamma =
5.5 (high)
Black Bear CR 1/2 AC 11 -0.2 Saves Gamma = -2.2
A +/- 5 Gamma corresponds to (0.8 - 1.2) multiplier on HP, and this is a "large" value from what I can tell.
A +/- 10 Gamma corresponds to a (0.7 - 1.4) multiplier on HP, and I found no monster with a Gamma this large, even the Tarrasque has a -8 when you factor in its magic resist.