解题思路:
多路递归
注意事项:
注意处理首尾不能都种的情况
参考代码:
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.length; i++) { a[i] = sc.nextInt(); } for (int i = 0; i < a.length; 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 < sum){ flag = true;//能种下 max = sum;//更新最大值 } return; } for (int i = k+2; i < a.length; i++) { dfs(a, mm+1, i,sum+a[i]);//递归解决下一个种树的位置 } } }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:584 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:458 |
不会做的浏览:870 |
字符逆序 (C语言代码)浏览:609 |
母牛的故事 (C语言代码)浏览:549 |
1128题解(返回值为数组的情况)浏览:450 |
企业奖金发放 (C语言代码)浏览:2315 |
C二级辅导-等差数列 (C语言代码)浏览:808 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:687 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:632 |