public class XieCheng2 {
/**
* 给定 n个岛屿的分数: x1 x2.. xn
* m张牌: y1 y2.. ym
* 每次前进 y1
* 问最高分数
*/
public static void main(String[] args) {
int n=4, m=2;
int[] scores = new int[]{1,2,3,4};
int[] cards = new int[]{1,2};
int maxScores=0;
LinkedList<ArrayList<Integer>> allCards = getAll(cards);
for (ArrayList<Integer> allCard : allCards) {
int cIndex=0;
int cScore=scores[0];
for (int i = 0; i < allCard.size(); i++) {
Integer cardNum = allCard.get(i);
cIndex += cardNum;
if(cIndex>n-1){
break;
}
cScore+=scores[cIndex];
}
maxScores = Math.max(cScore,maxScores);
}
System.out.println(maxScores);
}
public static LinkedList<ArrayList<Integer>> list = new LinkedList<>();
public static LinkedList<ArrayList<Integer>> getAll(int[] a){
boolean[] used = new boolean[a.length];
Deque<Integer> deque = new ArrayDeque<>();
for(int i=0; i<a.length; i++){
deque.addLast(a[i]);
used[i] = true;
dfs(a.length,a,used,deque);
used[i] = false;
deque.removeLast();
}
return list;
}
private static void dfs(int n, int[] a, boolean[] used, Deque<Integer> deque) {
if(deque.size() == n){
list.add(new ArrayList<>(deque));
return;
}
for(int i=0; i<a.length; i++){
if(!used[i]){
deque.addLast(a[i]);
used[i] = true;
dfs(a.length,a,used,deque);
used[i] = false;
deque.removeLast();
}
}
}
}