package xj;
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner;
public class PaMai { static int T,goods,man; static int data[][]; static int money[]; static int maxmoney; static boolean []Rused; static boolean []Sused;
public static void main(String[] args) throws FileNotFoundException { /* Scanner sc=new Scanner(System.in); */ Scanner sc=new Scanner(new File("src/PaiMai")); T=sc.nextInt(); for (int t = 0; t < T; t++) { goods=sc.nextInt(); man=sc.nextInt(); data=new int [man+1][3]; money=new int [man+1]; Rused=new boolean[man+1]; Sused=new boolean[goods+1]; for (int i = 1; i < man+1; i++) { data[i][0]=sc.nextInt();data[i][1]=sc.nextInt();data[i][2]=sc.nextInt(); money[i]=sc.nextInt(); } dfs(1,0); /*for (int i = 1; i < man+1; i++) { for (int j = 1; j < goods+1; j++) { System.out.print(" "+data[i][j]); } System.out.println(" "+money[i]); }*/ System.out.println(maxmoney); } }
private static void dfs(int step, int sum) { if(step>man){ if(maxmoney<sum){maxmoney=sum;} return; } for (int i = 1; i <=man; i++) { if(!Rused[i]){ //全买 if(!Sused[data[i][0]]&&!Sused[data[i][1]]&&!Sused[data[i][2]]){ sum+=money[i]*3; Sused[data[i][0]]=true; Sused[data[i][1]]=true; Sused[data[i][2]]=true; dfs(step+1,sum); sum-=money[i]*3; Sused[data[i][0]]=false; Sused[data[i][1]]=false; Sused[data[i][2]]=false; } //不买 dfs(step+1,sum); //买两件 if(!Sused[data[i][0]]&&!Sused[data[i][1]]){ sum+=money[i]*2; Sused[data[i][0]]=true; Sused[data[i][1]]=true; dfs(step+1,sum); sum-=money[i]*2; Sused[data[i][0]]=false; Sused[data[i][1]]=false; } if(!Sused[data[i][1]]&&!Sused[data[i][2]]){ sum+=money[i]*2; Sused[data[i][1]]=true; Sused[data[i][2]]=true; dfs(step+1,sum); sum-=money[i]*2; Sused[data[i][1]]=false; Sused[data[i][2]]=false; } if(!Sused[data[i][0]]&&!Sused[data[i][2]]){ sum+=money[i]*2; Sused[data[i][0]]=true; Sused[data[i][2]]=true; dfs(step+1,sum); sum-=money[i]*2; Sused[data[i][0]]=false; Sused[data[i][2]]=false; } } } }
}
//
2 5 3 1 2 3 50 2 4 5 90 1 3 4 70 12 4 1 2 3 50 4 5 6 70 7 8 9 60 10 11 12 90
//
410 810