Você está na página 1de 1

Universidade Estadual Vale do Acaraú - UVA

Curso: Ciências da Computação


Disciplina: Construção e Análise de Algoritmos
Professor: Cláudio Carvalho

Atividade 4 - Programação Dinâmica

Nome:

Observação: Apresentar possíveis soluções (rastreio) para as questões 3 e 4.

1. Considere o jogo em que são colocadas algumas pedras em uma mesa, e cada jogador
pode pegar 1, 3 ou 8 pedras de cada vez. O jogador que pegar as últimas pedras é o
vencedor. Dada uma quantidade n de pedras, proponha um algoritmo de complexidade
O(n) que diga se é possível o primeiro jogador vencer o jogo. Por exemplo, com 6 pedras
na mesa, ele sempre perde. As possíveis sequências de retiradas são:
h1, 1 , 1, 1 , 1, 1 i, h1, 1 , 1, 3 i, h1, 1 , 3, 1 i, h1, 3 , 1, 1 i, h3, 1 , 1, 1 i e h3, 3 i.
2. João dispõe de três tipos de azulejos com dimensões 1 × 1, 2 × 1 e 3 × 1. Ele decidiu
que irá dispor as peças em leiras de dimensões de 1 × n, de modo que não haja duas
leiras com uma mesma sequência de peças. Elabore um algoritmo que determine em
tempo linear o número máximo de leiras que João conseguirá fazer. A seguir, estão
as possibilidades para n = 3 e n = 5.
n=5

n=3

1 2 3 4 1 2 3 4 5 6 7 8 9 10 11 12 13

3. Dada uma cadeia S , formada exclusivamente por n dígitos decimais, proponha um


algoritmo que diga em tempo O(n) a quantidade de intervalos do tipo [i, j], com 1 ≤
i ≤ j ≤ n, tal que a soma dos dígitos da subcadeia S[i . . . j] seja um múltiplo de 3.
Por exemplo, a cadeia S = 101012 possui 5 intervalos com essa condição. São eles:
[1, 5], [2, 2], [4, 4], [4, 6] e [5, 6].
4. Dada uma coleção de inteiros X = hx1 , . . . , xn i, proponha um algoritmo de programa-
ção dinâmica que diga se é possível particionr X em três grupos I , J e K tais que:
n
1 X
xi .
X X X
xi = xj = ×
xk =
xi ∈I xj ∈J xk ∈K 3 i=1
Exemplo: X = h1, 2, 3, 4, 4, 5, 8i, é possível fazer I = h1, 8i, J = h4, 5i e K = h2, 3, 4i.

Você também pode gostar