AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
int dp[17][1<<16];
int number[17][17];
int N;
int dfs( int statu, int n ){
if( n == 0 ){
return 0;
}
if( dp[n][statu] != 0 ){
return dp[n][statu];
}
for( int i = 0; i < N; i++ ){
if( statu & ( 1 << i ) ){
dp[n][statu] = max( number[n][i+1] + dfs( statu ^ ( 1 << i ), n - 1 ), dp[n][statu] );
}
}
return dp[n][statu];
}
int main(){
int T, Case = 1;
cin >> T;
while( T-- ){
cin >> N;
for( int i = 1; i <= N; i++ ){
for( int j = 1; j <= N; j++ ){
cin >> number[i][j];
}
}
memset( dp, 0, sizeof( dp ) );
int ans = dfs( ( 1 << 16 ) - 1, N );
cout << "Case " << Case++ << ": " << ans << endl;
}
return 0;
}