树木消杀问题

一个小的算法题目

一排树中,每棵树上都有若干虫子,用一个数组表示。

消杀可以杀灭其中一棵树上的所有虫子,但相邻的两棵树上的虫子会飞走(不会落回到某棵树上)。

为了消灭最多的虫子,写一种算法选择出应该消杀哪些棵树,并求出能消灭的虫子数量。

实现

https://github.com/zongzw-learn/learn-go/tree/master/code-test/max-indvidials


package main

import "log"

func main() {
	a := []int{2, 3, 5, 4, 1, 4} // 0 2 5
	x, y := maxab(a, 0)
	log.Printf("max: %d, %v", x, y)
}


func maxab(a []int, o int) (int, []int) {
	if len(a) == 1 {
		return a[0], []int{o}
	}
	if len(a) == 2 {
		if a[0] > a[1] {
			return a[0], []int{o}
		} else {
			return a[1], []int{1 + o}
		}
	}

	x1, y1 := maxab(a[2:], 2+o)
	x2, y2 := maxab(a[1:], 1+o)
	if a[0]+x1 > x2 {
		return a[0] + x1, append([]int{o}, y1...)
	} else {
		return x2, y2
	}
}
posted @ 2024-07-04 13:35  zongzw  阅读(40)  评论(0)    收藏  举报