2.9 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5900f4b41000cf542c50ffc7 | Problema 328: Pesquisa pelo menor custo | 5 | 301985 | problem-328-lowest-cost-search |
--description--
Estamos tentando encontrar um número oculto selecionado de um conjunto de números inteiros {1, 2, ..., $n$} fazendo perguntas. Cada número (pergunta) que perguntamos, tem um custo igual ao número solicitado e nós recebemos uma de três respostas possíveis:
- "Seu palpite é menor que o número oculto", ou
- "Sim, é isso!", ou
- "Seu palpite é maior que o número oculto".
Dado o valor de n
, uma estratégia ideal minimiza o custo total (ou seja, a soma de todas as perguntas feitas) para o pior caso possível. Ex:
Se n = 3
, o melhor que podemos fazer é obviamente perguntar o número "2". A resposta nos levará imediatamente a encontrar o número oculto (a um custo total de 2).
Se n = 8
, nós podemos decidir usar um tipo de estratégia com "busca binária": nossa primeira questão seria "4" e se o número oculto for maior que 4, precisaremos de uma ou duas questões adicionais. Considere que nossa segunda pergunta seja "6". Se o número oculto ainda for superior a 6, necessitaremos de uma terceira pergunta para discriminar entre 7 e 8. Assim, nossa terceira pergunta será "7" e o custo total para este cenário pior, será 4 + 6 + 7 = \mathbf{\color{red}{17}}
.
Podemos melhorar consideravelmente o pior custo para n = 8
, tendo "5" como nossa primeira pergunta. Se nos disserem que o número oculto é maior que 5, a nossa segunda pergunta será "7", então saberemos com certeza qual é o número oculto (para um custo total de 5 + 7 = \mathbf{\color{blue}{12}}
). Se nos disserem que o número oculto é menor que 5, nossa segunda pergunta será "3". Se for menor que 3, nossa terceira pergunta será "1", dando um custo total de 5 + 3 + 1 = \mathbf{\color{blue}{9}}
. Como \mathbf{\color{blue}{12 > 9}}
, o pior caso de custo para esta estratégia é 12. Isso é melhor do que o que alcançamos anteriormente com a estratégia de "pesquisa binária"; também é melhor ou igual a qualquer outra estratégia. Então, de fato, acabamos de descrever uma estratégia ideal para n = 8
.
Considere C(n)
como o pior caso de custo alcançado com uma estratégia ideal para n
, como descrito acima. Assim, C(1) = 0
, C(2) = 1
, C(3) = 2
e C(8) = 12
.
Da mesma forma, C(100) = 400
e \displaystyle\sum_{n = 1}^{100} C(n) = 17575
.
Encontre \displaystyle\sum_{n = 1}^{200.000} C(n)
.
--hints--
lowestCostSearch()
deve retornar 260511850222
.
assert.strictEqual(lowestCostSearch(), 260511850222);
--seed--
--seed-contents--
function lowestCostSearch() {
return true;
}
lowestCostSearch();
--solutions--
// solution required