解题思路:
多路递归
注意事项:
注意处理首尾不能都种的情况
参考代码:import java.util.Scanner;
public class Main {
static int max = 0;
static int m ;
static boolean flag = false;//标记是否能种
static int ss;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
m = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i
a[i] = sc.nextInt();
}
for (int i = 0; i
ss = i;//记录 i=0的情况
dfs(a,1,i,a[i]);
}
if(flag)
System.out.println(max);
else
System.out.println("Error!");
}
private static void dfs(int[] a, int mm, int k,int sum) { // mm 表示种下第几棵树,k代表将要种下树的位置,sum代表美化值和
if(ss == 0 && k == a.length-1){//处理首尾不能都种的情况
return;
}
if (mm == m){
if(max
flag = true;//能种下
max = sum;//更新最大值
}
return;
}
for (int i = k+2; i
dfs(a, mm+1, i,sum+a[i]);//递归解决下一个种树的位置
}
}
}