Problemas de Programação para Engenheiros de Software da Sohu 2016
1、[Problema de Programação] Torre do Circo
O funcionário da Sohu, Wang, recentemente aproveitou suas férias para viajar e em uma pequena cidade encontrou uma apresentação de circo. Após o espetáculo emocionante, ele descobriu que o diretor estava discutindo intensamente com a equipe na frante da tenda. Wang perguntou e descobriu que o circo es ...
Publicado em 6-26 20:24
Contagem de DP em Autômatos para Algoritmos de Strings
Este artigo explora o uso de programação dinâmica (DP) em autômatos construídos, com foco no autômato KMP e na árvore de falhas para resolver problemas de contagem em strings.
Autômato KMP e Árvore de Falhas
O autômato KMP é uma estrutura que permite correspondência eficiante de padrões. A função de falha (fail) e a tabela de transição (next) s ...
Publicado em 6-26 05:16
Programação Dinâmica da Mochila
P2340 [USACO03FALL] Cow Exhibition G Enunciado: Dadas N vacas, cada uma com QI S e QE F, selecione algumas vacas de modo que a soma dos QIs e a soma dos QEs sejam ambas positivas, maximziando a soma total (S + F). Abordagem: Podemos tratar o QI como peso e o QE como valor, resolvendo um problema de mochila 0/1. Como o QI pode ser negativo, usam ...
Publicado em 6-22 16:46
Programação Dinâmica: Abordagens e Aplicações Práticas
2024.04.06
Este artigo explora os fundamentos da programação dinâmica, abordando quatro problemas clássicos que demonstram diferentes aplicações dessa técnica poderosa:
Mochila Completa
Troco de Moedas II
Soma de Combinações IV
Divisão de Palavras
A metodologia para resolver problemas de programação dinâmica envolve cinco passos essenciais:
...
Publicado em 6-19 04:46
Algoritmos Gulosos: Implementações e Análise em C++
Exercícios Práticos de Algoritmo Guloso
Problema 455: Distribuição de Biscoitos
A abordagem gulosa envolve ordenar as necessidades das crianças e os tamanhos dos biscoitos, e depois alocar o maior biscotio disponível para a criança com maior necessidade que ele possa satsifazer.
class Solucao {
public:
int encontrarCriancasContentes(vector& ...
Publicado em 6-12 19:28
Otimizando a Construção de Grafos com Busca Memorizada
O código original, que utiliza uma abordagem de O(n²) para construir o grafo, resultou em um tempo de execução de 772ms. A principal causa dessa complexidade é a maneira como as arestas são adicionadas entre os nós.
#include<bits>
#define int long long
using namespace std;
const int N=1e6+10,M=1e4+10;
int n,m,res,f[N],p[N],a[N],s,k,level ...
Publicado em 6-9 23:36
Algoritmos Essenciais para Resolução de Problemas em Entrevistas Técnicas
Este artigo explora três problemas desafiadores frequentemente encontrados em entrevistas técnicas, abordando suas soluções através de algoritmos fundamentais: Programação Dinâmica, Abordagem com Pilha e Busca Binária.
Problema 1: Distância de Edição (LeetCode 72, Difícil)
Análise do Problema
Dadas duas strings, word1 e word2, determine o númer ...
Publicado em 6-6 16:50
Resolvendo o Problema da Mochila Ilimitada com Programação Dinâmica
O problema da mochila ilimitada, também conhecido como problema da mochila não restrita, é um clássico problema de otimização. Dada uma capacidade de mochila e um conjunto de itens, cada um com um peso e valor, o objetivo é maximizar o valor total dos itens que podem ser colocados na mochila. A característica distintiva deste problema é que cad ...
Publicado em 6-6 05:27
Soluções para Problemas do AtCoder Beginner Contest 408 em C++
Problema A: Timeout
Verificar se para toda sequência de inteiros \(a_1, a_2, \dots, a_n\), com \(a_0 = 0\), a condição \(a_i - a_{i-1} \le S\) é satisfeita para cada \(i\) entre 1 e \(n\).
A solução envolve iterar pelos elementos e comparar as diferenças consecutivas com o limite.
#include <iostream>
using namespace std;
int main() {
...
Publicado em 6-4 00:46
Introdução à Programação Dinâmica: O Triângulo Numérico
O problema do Triângulo Numérico (POJ1163) consiste em encontrar o caminho de maior soma em um triângulo numérico, onde cada passo permite mover-se para a esquerda inferior ou direita inferior. O objetivo é calcular essa soma máxima, sem a necessidade de exibir o caminho percorrido. O número de linhas do triângulo é entre 2 e 100, e os números ...
Publicado em 6-1 16:55