scala 回溯法解决0-1背包问题

object BeiBao_huishuo extends App{
	val num = 5
	val volumn = 100
	val thing = Array((92,77),(22,22),(87,29),(46,50),(90,99)) //(价值,重量)
	// val volumn = 10
	// val thing = Array((6,2),(3,2),(5,6),(4,5),(6,4)) //(价值,重量)
	var maxvalue = 0
	// def find(n:Int,nowvalue:Int,nowvolumn:Int){
	// 	if(n == 0 && nowvolumn >= 0){
	// 		if(nowvalue > maxvalue) maxvalue = nowvalue
	// 		return
	// 	}
	// 	if(nowvolumn < 0) return
	// 	for(i <- 0.until(2)){
	// 		if(i == 0) find(n-1,nowvalue,nowvolumn)
	// 		else{
	// 			find(n-1,nowvalue+thing(n-1)._1,nowvolumn-thing(n-1)._2)
	// 		}
	// 	}
	// }
	def find(n:Int,nowvalue:Int,nowvolumn:Int){ //去除return
		if(n == 0 && nowvolumn >= 0 ){
			if(nowvalue > maxvalue) maxvalue = nowvalue
		}
		else if(nowvolumn >= 0){
			for(i <- 0.until(2)){
				if(i == 0) find(n-1,nowvalue,nowvolumn)
				else{
					find(n-1,nowvalue+thing(n-1)._1,nowvolumn-thing(n-1)._2)
				}
			}
		}
	}
	find(num,0,volumn)
	println(maxvalue)
}

    原文作者:回溯法
    原文地址: https://blog.csdn.net/o1101574955/article/details/52561498
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞