Good concise explanation. For those who missed it a few months back, I wrote a blog post which contained an explanation of NP and, more importantly, why it's important for programmers to recognise NP problems.
The section headings 'Understanding NP-complete completely useless?' and 'Recognising NP-complete problems' are the most relevant. http://lifebeyondfife.com/helping/