打气球dfs

    xiaoxiao2021-03-25  104

    

    package xj;

    import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner;

    public class DaQiqiu {  static int T, N, maxsum;  static int data[];  static int num[];  static boolean used[];

     public static void main(String[] args) throws FileNotFoundException {   /* Scanner sc=new Scanner(System.in); */   Scanner sc = new Scanner(new File("src/DaQiqiu"));   T = sc.nextInt();   for (int t = 0; t < T; t++) {    N = sc.nextInt();    data = new int[N];    used = new boolean[N];    num=new int[N];    for (int i = 0; i < N; i++) {     data[i] = sc.nextInt();    }    maxsum = 0;     dfs(0,0);

       /*     * for (int i = 0; i < N; i++) { System.out.print(" "+data[i]); }     */

       System.out.println(maxsum);   }  }

     private static void dfs(int step, int sum) {   if (step == N) {    if (maxsum < sum) {     maxsum = sum;    }    return;   }   for (int i = 0; i < N; i++) {        if (!used[i]) {     int l = -1;     int r = -1;     int t = sum;     // you     for (int j = i + 1; j < N; j++) {//这里一开始弄混淆了i和step      if (!used[j]) {       r = j;       break;      }     }     // zuo     for (int j = i - 1; j >= 0; j--) {      if (!used[j]) {       l = j;       break;      }     }     //     if (l == -1 && r != -1) {      sum += data[r];     }     //     if (l != -1 && r == -1) {      sum += data[l];     }     //     if (l != -1 && r != -1) {      sum += data[l] * data[r];     }     //     if (l == -1 && r == -1) {      sum += data[i];     }     used[i] = true;     dfs(step + 1, sum);     used[i] = false;     sum = t;    }   }  } }

    //input

    7 5 3 10 1 2  5 7 12 48 28 21 67 75 85 6 2 3 4 6 7 1 4 1 2 3 4 10 1 2 1 4 5 6 7 8 9 10 5 1 2 3 4 5 3 2 8 3

    //output

    100 16057 84 20 360 40 24

    转载请注明原文地址: https://ju.6miu.com/read-14781.html

    最新回复(0)