It really depends on what shape you want. Also, if you don't want *exactly* 100 blocks, just to approximate, that helps a lot.
Using the forest example you gave, I would create an ellipse consisting of 90 blocks, then adding random smaller patches ( circles, ellipses, whatever, you name it ) until I'm done.
Or just morph that ellipse. Maybe distort it, using perlin noise. Or use the perlin noise and mask it with the ellipse. The ellipse would have high values on the inside ( so that the ellipse is guaranteed to be filled ) and fade to negative values over some distance.
Or choose a bounding box and iterate with it until having enough patches. Each iteration would choose a random position in the bounding box, check it's distance from the center and use it as a probability to create a patch at that location.
If you're marginally past your tile count, you can even chop off random patches ( starting from the sides would be a good idea, a forest with a hole in it's center would be weird )
If you are rasterizing these patches on CPU, it's really not hard to count the number of tiles filled. Otherwise, you could just add up the patches' areas and hope for the best.
Also, I've been using your forest example, but you could apply these principles to almost anything you want to generate. I really encourage visual testing, as that gives you a clear clue about the shape you get with these methods. Feel free to experiment ( even with some weird exotic functions ), you can go iterative and put down patches, or you could define functions, use sine waves, gradients, or even the mix of the two. Go really wild with your experiments