1341: 比赛

两种方法;

一、暴力破解

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        int n = sc.nextInt();
        int a[][] = new int[n][6];
        int add[] = new int[n];
         
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                a[i][j] = sc.nextInt();
                add[i] += a[i][j];
            }
        }
         
        for (int i = 0; i < a.length; i++) {
            if(add[i]%2==0) {
                int t = add[i]/2;
                if(a[i][0]+a[i][1]+a[i][2]==t||a[i][0]+a[i][1]+a[i][3]==t||
                    a[i][0]+a[i][1]+a[i][4]==t||a[i][0]+a[i][1]+a[i][5]==t||
                    a[i][0]+a[i][2]+a[i][3]==t||a[i][0]+a[i][2]+a[i][4]==t||
                    a[i][0]+a[i][2]+a[i][5]==t||a[i][0]+a[i][3]+a[i][4]==t||
                    a[i][0]+a[i][3]+a[i][5]==t||a[i][0]+a[i][4]+a[i][5]==t||
                    a[i][1]+a[i][2]+a[i][3]==t||a[i][1]+a[i][2]+a[i][4]==t||
                    a[i][1]+a[i][2]+a[i][5]==t||a[i][1]+a[i][3]+a[i][4]==t||
                    a[i][1]+a[i][3]+a[i][5]==t||a[i][1]+a[i][4]+a[i][5]==t||
                    a[i][2]+a[i][3]+a[i][4]==t||a[i][2]+a[i][3]+a[i][5]==t||
                    a[i][2]+a[i][4]+a[i][5]==t||a[i][3]+a[i][4]+a[i][5]==t)
                    System.out.println("YES");
                else
                    System.out.println("NO");
            }else {
                System.out.println("NO");
            }
        }
    }
}
/**************************************************************
    Problem: 1341
    User: 20161514325
    Language: Java
    Result: 正确
    Time:278 ms
    Memory:14052 kb
****************************************************************/

这种方法思路方法简单,但是写算法太浪费时间,可以换一种方法:

二、变换的全排列

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        int n = sc.nextInt();
        int a[][] = new int[n][6];
        int aaa[][] = new int[n][6];
        int add[] = new int[n];
        int fif[] = new int[n];
         
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                a[i][j] = sc.nextInt();
                add[i] += a[i][j];
            }
        }
         
        for (int i = 0; i < a.length; i++) {
            if(add[i]%2==0) {
                f(a,aaa,i,3,0,add[i]/2,fif);
                if(fif[i] == 1)
                    System.out.println("YES");
                else
                    System.out.println("NO");
            }else {
                System.out.println("NO");
            }
        }
    }
 
    private static void f(int[][] a, int[][] aaa, int i, int j, int k, int add, int fif[]) {
        if(j>=1) {
            for (int l = 0; l < 6; l++) {
                if(aaa[i][l]==0) {
                    aaa[i][l] = 1;
                    k += a[i][l];
                    f(a,aaa,i,j-1,k,add,fif);
                    aaa[i][l] = 0;
                    k -= a[i][l];
                }
            }
        }else if(j==0){
            if(k==add) {
                fif[i] = 1;
            }
        }
    }
}
/**************************************************************
    Problem: 1341
    User: 20161514325
    Language: Java
    Result: 正确
    Time:255 ms
    Memory:13692 kb
****************************************************************/

猜你喜欢

转载自blog.csdn.net/qq_39507723/article/details/83720370