Programação série Contest (a) C / C ++ exaustão algoritmo (search violência) e busca binária

Acredito que muitas pessoas têm uma vontade de querer obter medalhas na ACM-ICPC, GCJ, TopCoder no nível universitário, mas o mercado um monte de curso irregular, sem garantia de qualidade e preço, há muitos ridiculamente caro. Espero que o meu artigo pode ajudá-lo a aprender a poupar custos e fornecer uma maior qualidade de percursos de aprendizagem. O título desta série de artigos são selecionados a partir de uma série de livros de algoritmos bem conhecidos, não há tópico original. Mas eu vou ser melhor compreendida por meio de, tentar explicá-lo difícil de entender o algoritmo torna-se mais fácil de entender. Esta é a minha meta, e todos estão dispostos a aprender juntos, e progresso comum.

Aqui Insert Picture Descrição

Programação Concurso é provavelmente introduzido

Tipo de Programação Concurso Há muitos, tivemos de lutar contra o desempenho de resolução de problemas. Pode-se dizer variedade, estamos a falar é o conteúdo da programação de modo que o alto-falante é a resolução de problemas. Essa competição faz, antes de jogadores titulares vai saber o número de tópicos, e sua tarefa é, por um tempo limitado, tanto quanto possível (é claro, é correta e satisfazer as condições necessárias) para completar essas perguntas.

Este artigo é o primeiro artigo Programação Concurso série artigo introdutório, vamos introduzir dois algoritmos de hoje: algoritmos Exaustão e busca binária

exaustão Algoritmos

Exaustão Algoritmos Vantagens e Desvantagens

algoritmo de exaustão , é um algoritmo usado por um grande número de pessoas, tem a vantagem da simplicidade, mas também tem grandes desvantagens. Essa é a sua complexidade. Sua complexidade está diretamente relacionado com o número de ciclos até a sua relação exponencial . Seja N o número de vezes por um ciclo, m é o número dos seus ciclos. Em seguida, sua complexidade é O (a n- ^ m) , o que significa que se você fizer um loop quadruple então a sua complexidade já é uma figura assustador. Se você tem um cinco vezes ou mais, você tem que enfrentar as horas extras básico.
Claro que, em alguns lugares este algoritmo ainda é muito útil, aqui vamos introduzir um tópico para descrevê-lo ainda mais

Tópico: Obtendo triângulo, o tópico algoritmo clássicoAqui Insert Picture Descrição

Para isso podemos analisar este problema, três varas opcionalmente determina se cumprem as condições de um triângulo composto de quaisquer dois lados é maior que a soma do terceiro lado , satisfeito se, em seguida, usamos alguns meios para gravá-lo, e quando há uma maior circunferência quando o triângulo, nosso algoritmo pode ser independente do triângulo maior perímetro perímetro antes de substituir gravado fora do perímetro. Então, vamos ser capazes de ter uma idéia aproximada.

  1. Determinar se o triângulo pode ser composto.
  2. Se assim for, o triângulo é colocado em torno do seu perímetro que o tamanho, que retém um grande e pode ser determinada pela composição e os próximos três triângulos ater perímetro do que o perímetro do triângulo antes. E que uma retenção maior novamente.
  3. A saída final é retido triângulo.
    Aqui usamos algoritmos para representar o processo dele.
int n, a[Max];
void solve(){
	int ans = 0;  //答案

	//让i<j<k, 这样棍子就不会被重复选中了
	for(int i = 0; i < n; i++){
		for(int j = i +1; j <n; j++){
			for(int k= j + 1; k< n ; k++){
			int  len = a[i] + a[j] + a[k];               //周长
			int ma = max(a[i] , max(a[j], a[k]));//最长棍子的长度
			int rest = len - ma;
		if(ma < rest){
		//  可以组成三角形,如果可以更新答案则更新
		ans = max(ans, len);
			 }
 		}
 	}
printf("%d\n", ans);
}

	

Vamos explicar este algoritmo: Primeiro, vamos atribuir os ans , se o grupo não é um triângulo, então o valor é 0 ans vai , se você pode fazer-se um triângulo, então ans valor será o maior perímetro triangular . Em seguida, digite o nosso foco em loop triplo para alguns amigos para lembrar de algum conceito vago de gramática, veja aqui vai se sentir um pouco estranho, não é a primeira vez que o algoritmo roda i = 0, j = 1, c = 2, o segundo corre i = 1, j = 2, c = 3 e assim fazer . Na verdade, não da . Devido nossas prioridades para circuito é para iniciar o circuito externo para o circuito , e, em seguida, executar todos os loops terminar no circuito e de volta para fora do circuito. Então, na verdade, toda a vara todas as combinações possíveis estão relacionados com. Novamente analisa o conteúdo do anel mais interno. Primeiro, deixe o comprimento de três soma vara atribuído a len, len é realmente perímetro (se você pode fazer-se um triângulo, então) E então vamos ficar com os três, o maior comprimento de atribuição para ma vara, deixar o resto e o comprimento das duas varas atribuídos para descansar, enquanto nós comparar ma é menor do que o resto pode ser determinado se o triângulo composição. Se você puder, vamos colocar o maior perímetro ans atribuídos , e em seguida, o ciclo continua até que a implementação do ciclo completo de tudo , porque a volta por isso, se há um longo perímetro do triângulo irá substituir o ans originais valor e re-atribuído a ans. Então concluímos a maior circunferência da tarefa de saída

Você falou aqui em comparação com o algoritmo Exaustão ter um bom entendimento.

Aqui Insert Picture Descrição

busca binária

Em vista do céu demasiado tarde, blogueiros irá completar a busca de atualização binário antes de 03:10 . Boa noite, sonhos doces!

Lançado oito artigos originais · ganhou elogios 41 · vista 4682

Acho que você gosta

Origin blog.csdn.net/weixin_45950372/article/details/104743305
Recomendado
Clasificación