結果
| 問題 | 
                            No.519 アイドルユニット
                             | 
                    
| コンテスト | |
| ユーザー | 
                             tookunn_1213
                         | 
                    
| 提出日時 | 2017-05-29 22:07:41 | 
| 言語 | Java  (openjdk 23)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 148 ms / 1,000 ms | 
| コード長 | 2,076 bytes | 
| コンパイル時間 | 2,149 ms | 
| コンパイル使用メモリ | 77,520 KB | 
| 実行使用メモリ | 118,912 KB | 
| 最終ジャッジ日時 | 2024-10-03 03:55:16 | 
| 合計ジャッジ時間 | 5,885 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge1 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 34 | 
ソースコード
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.NoSuchElementException;
public class Main {
	int N;
	int[][] F;
	int[] dp;
	public int dfs(int S){
		if(S == (1 << N)-1)return 0;
		if(dp[S] != -1)return dp[S];
		int ret = 0;
		int index = -1;
		for(int i = 0;i < N;i++){
			if((S>>i&1) == 0){
				index = i;
				break;
			}
		}
		for(int i = 0;i < N;i++){
			if((S>>i&1)==1)continue;
			ret = Math.max(ret,dfs(S | 1 << index | 1 << i) + F[index][i]);
		}
		return dp[S] = ret;
	}
	public void solve() {
		N = nextInt();
		F = new int[N][N];
		for(int i = 0;i < N;i++){
			for(int j = 0;j < N;j++){
				F[i][j] = nextInt();
			}
		}
		dp = new int[1 << N];
		Arrays.fill(dp,-1);
		out.println(dfs(0));
	}
	public static void main(String[] args) {
		out.flush();
		new Main().solve();
		out.close();
	}
	/* Input */
	private static final InputStream in = System.in;
	private static final PrintWriter out = new PrintWriter(System.out);
	private final byte[] buffer = new byte[2048];
	private int p = 0;
	private int buflen = 0;
	private boolean hasNextByte() {
		if (p < buflen)
			return true;
		p = 0;
		try {
			buflen = in.read(buffer);
		} catch (IOException e) {
			e.printStackTrace();
		}
		if (buflen <= 0)
			return false;
		return true;
	}
	public boolean hasNext() {
		while (hasNextByte() && !isPrint(buffer[p])) {
			p++;
		}
		return hasNextByte();
	}
	private boolean isPrint(int ch) {
		if (ch >= '!' && ch <= '~')
			return true;
		return false;
	}
	private int nextByte() {
		if (!hasNextByte())
			return -1;
		return buffer[p++];
	}
	public String next() {
		if (!hasNext())
			throw new NoSuchElementException();
		StringBuilder sb = new StringBuilder();
		int b = -1;
		while (isPrint((b = nextByte()))) {
			sb.appendCodePoint(b);
		}
		return sb.toString();
	}
	public int nextInt() {
		return Integer.parseInt(next());
	}
	public long nextLong() {
		return Long.parseLong(next());
	}
	public double nextDouble() {
		return Double.parseDouble(next());
	}
}
            
            
            
        
            
tookunn_1213