I disagree with the "give them cash" part - donating to shelters or charities is often better. Not because "they will spend it on drugs", which you really can't tell, but because it's a better way to help the overall population rather than a single individual. And giving cash often leads to some perverse incentives.