[Preguntas programación] impacto de piedras dEFt 20 Golang

[Programación problema] impacto de piedras
podemos considerar el siguiente procedimiento:
la piedra divididos en dos grupos, uno de piedra tomada de la pila m A, B pila tomada n, puede suponer que m> = n.
Después de los escombros colisión es mn, Un montón debe ser colocado.
Antes y después de la colisión, se encuentran dos pilas de baja calidad no ha cambiado. Repita la operación hasta el momento de la colisión y vaya a la izquierda una pila, se encuentra el resto de la diferencia es la calidad de las pilas. Realmente muy inteligente, por lo que a fin de que la calidad final del mínimo restante, debemos dejar que la calidad de los montones de piedras tan cerca como sea posible, es decir, lo más lejos posible de la media.
Además, cuando la capa interior para muy inteligente. Empecé a escribir que i ++, esto dará lugar a la reutilización v. Por ejemplo, v es una piedra de 20, 40, 60 ... que será marcado como verdadera. Deslizando la circulación escala puede evitar este problema.

package main

import (
	"fmt"
)

func main() {
	var n, tmp, sum, max int
	var w []int
	fmt.Scan(&n)
	for i := 0; i < n; i++ {
		fmt.Scan(&tmp)
		sum += tmp
		w = append(w, tmp)
	}
	flag := make([]bool, sum/2+1)
	flag[0] = true
	for _, v := range w {
		for i := sum / 2; i >= v; i-- {
			flag[i] = flag[i] || flag[i-v]
		}
	}
	for i := sum / 2; i >= 0; i-- {
		if flag[i] {
			fmt.Print(sum - 2*i)
			break
		}
	}
}
Publicado 38 artículos originales · ganado elogios 0 · Vistas 1010

Supongo que te gusta

Origin blog.csdn.net/Cyan1956/article/details/105332999
Recomendado
Clasificación