Dynamic programming and branch and bound give accurate answer by definition.
Greedy algorithm gives inaccurate answer, but it is fast.
Brute force gives an accurate solution, but has really bad complexity ($O(n!)$).
All the other methods are inaccurate. But everything depends on where to implement these algorithms. If you are solving programming task on TopCoder, you'll possibly use some sort of dynamic programming with its accurate answer and okay complexity. But if you're solving a real life problem with really large input, you'll possibly use optimization (genetic, for example). If the input is tiny, bruteforce works.