这个怎么做?用暴力法解?所有可能排列,求最大值?
下面是用Go语言实现的代码,组合遍历求解,不知道对不对
package mainimport ( "bufio" "fmt" "os" "strconv" "strings")var tmplist []intfunc main() { for { // v, val := fmtRead() v, val := bufioRead() result := loveMagicNumber(v, val, 8) fmt.Println("可油漆最大数字为:", result) fmt.Println() }}func bufioRead() (int, []int) { var v int var val = []int{} r := bufio.NewReader(os.Stdin) for { fmt.Println("请输入油漆容量:(整数)") strBytes, _, err := r.ReadLine() str := strings.TrimSpace(string(strBytes)) v, err = strconv.Atoi(string(str)) if err == nil { break } else { fmt.Println(err) } } for { fmt.Println("请输入1-9,九个数字各自需要的油漆:(整数)") strBytes, _, err := r.ReadLine() str := strings.TrimSpace(string(strBytes)) _ = err strs := strings.Split(str, " ") for i := 0; i < len(strs); i++ { if strs[i] == "" { continue } vt, _ := strconv.Atoi(strs[i]) val = append(val, vt) } break } fmt.Println("油漆容量:1-9数字耗费油漆量", v, ":", val) return v, val}func loveMagicNumber(v int, val []int, index int) int { if index < 0 { return valueof(tmplist) } r1 := loveMagicNumber(v, val, index-1) r2 := r1 if v-val[index] >= 0 { tmplist = append(tmplist, index+1) r2 = loveMagicNumber(v-val[index], val, index-1) tmplist = tmplist[0 : len(tmplist)-1] } return max(r1, r2)}func valueof(valist []int) int { value := 0 for _, i := range valist { value = value*10 + i } return value}func max(a int, b int) int { if a > b { return a } return b}
顺便吐槽下Go语言,Go语言的库不好用,不管什么标准输入获取、字符串操作Split,Atoi,非常反直觉,库文档写的也不是很清楚