A dice game called "Greed"
Style
You're not being charged by the character; there's no need to abbreviate "count", or "ret" (which I would call "score" instead).  Also, main has inconsistent brackets with the rest of the program.  Other than that, it looks good.

Globals
The globals are only being used by greed_rand, and would be better created within main and passed as parameters to greed_rand.

Counting Logic
Currently you're checking each possible quantity of '1's (and other numbers) separately, and not in order either, which makes it harder to ensure you're not missing a case and will fail if you change the number of total dice.  An improvement would be to check for the larger combinations first and just continue scoring as long as possible.  For example:  

for(; count[1] &gt;= 3; count[1] -= 3) 
{
    score += 1000;
}
for(; count[1] &gt; 0; --count[1]) 
{
    score += 100;
}


This also matches the score chart more clearly.

Output
You're outputting the end result of greed_rand, but not what list generated that result - which means you can't really tell if it was correct.  It would probably be better to replace greed_rand with a method that makes a random list, and pass that to greed yourself, so you can also output it:

std::vector&lt;int&gt; roll_dice(int count, std::mt19937 &amp;engine)


Use of Templates (Optional)
While not required for this usage, greed would be a good candidate for taking a pair of generic iterators instead of requiring a std::vector:

template&lt;typename Iterator&gt;
int greed(Iterator begin, Iterator end) 
{
   ...
   for (auto it = begin; it != end; ++it)
   {
       ++cnt[*it];
   }