题目链接:https://www.dotcpp.com/oj/problem1551.html
题目分析:
- 给定n 个种树的位置(每个位置都有一个美观度) 和 m 个树苗,并且要求每一个树的左右必须为空,求最大美观度(需要判断种不下的情况)。
- 对于每个位置有两种选择,
种or不种,直接暴力搜索找种的下的情况下的最大值。
import java.util.*;public class Main{public static int ans = Integer.MIN_VALUE;public static boolean[] visited;public static void dfs(int[] arr, int n, int m, int i, int total){if(m == 0){ans = Math.max(ans, total);return;}if(i >= n){return;}//选当前位置if(!visited[i] && !visited[(i-1+n) % n] && !visited[(i+1) % n]){visited[i] = true;dfs(arr, n, m-1, i+1, total + arr[i]);visited[i] = false;}//不选当前位置dfs(arr, n, m, i+1, total);}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[] arr = new int[n];visited = new boolean[n];for(int i = 0; i < n; i ++){arr[i] = sc.nextInt();}dfs(arr, n, m, 0, 0);if(ans == Integer.MIN_VALUE){System.out.println("Error!");}else{System.out.println(ans);}}}
