Here is my solution...works in most case, fails in some (like 34)

#!/usr/bin/ruby
# Written by Andrey Falko

def factor(n)
        factors = []

        if (n < 8)
                factors.push(n)
                return factors
        end

        itr = 4
        itr = (n / 4).to_i if (n < 25)
        while (itr < n - (n / 2) + 1)
                if (n % (itr) == 0)
                        factors.concat(factor(itr))
                        factors.concat(factor(n / itr))
                else
                        itr = itr + 1
                        next
                end

                itr = itr + 1
                prod = 1
                for num in factors
                        prod = prod * num
                end

                return factors if (prod == n)
        end

        factors.push(n) if (factors.length == 0) # Primes

        return factors
end

def count(picks)
        cnt = 0
        strs = picks.split('x')
        for str in strs
                cnt += 2
                cnt += str.length
                cnt += 1 if (str =~ /\+/)
        end

        return cnt - 2
end

def minPicks(n)
        if (n <= 8)
                return '|' * n
        else
                factors = factor(n)
                str = ''
                if ((factors.length == 1 && factors[0] == n && n > 11)
|| n == 34)
                        len = n
                        itr = 1
                        while (8 < n - itr)
                                try = minPicks(n - itr) + '+' + ('|' * itr)
                                itr += 1
                                if (len > (tmp = count(try)))
                                        len = tmp
                                        store = try
                                end
                        end

                        return store
                end

                for fac in factors
                        if (fac == n && n <= 11) # Primes <= 11
                                return '|' * n
                        else
                                str = str + minPicks(fac) + 'x'
                        end
                end

                str = str.gsub(/x$/, '')
                return str
        end
end

n = $*[0].to_i
picks = minPicks(n)

print n.to_s + ": " + picks.to_s + " (" + count(picks).to_s + " toothpicks)\n"