結果

提出番号 1601
提出者 ecasdqina
言語 C++
提出日時 2018-08-04 13:14:56
問題名 (70)アルゴリズムのお勉強
結果 TLE
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 WA 0% 4ms 8080KB
2 WA 0% 2ms 8016KB
3 WA 0% 5ms 8672KB
4 WA 0% 2ms 8448KB
5 WA 0% 2ms 8432KB
6 WA 0% 1184ms 8432KB
7 WA 0% 5ms 7824KB
8 WA 0% 2ms 8704KB
9 WA 0% 2ms 8416KB
10 WA 0% 5ms 7520KB
11 TLE 0% 20002ms 0KB
12 TLE 0% 20002ms 0KB
13 TLE 0% 20002ms 0KB
14 TLE 0% 20002ms 0KB
15 TLE 0% 20002ms 0KB
16 WA 0% 58ms 7776KB
17 WA 0% 5ms 8448KB
18 WA 0% 5ms 7792KB
19 TLE 0% 20002ms 0KB
20 TLE 0% 20001ms 0KB
21 WA 0% 49ms 8736KB
22 TLE 0% 20002ms 0KB
23 WA 0% 1023ms 8272KB
24 TLE 0% 20002ms 0KB
25 TLE 0% 20002ms 0KB
26 TLE 0% 20002ms 0KB
27 TLE 0% 20002ms 0KB
28 TLE 0% 20001ms 0KB
29 TLE 0% 20002ms 0KB
30 TLE 0% 20002ms 0KB

ソースコード

#include <bits/stdc++.h>
typedef long long ll;
using std::cout;
using std::endl;
using std::cin;

int n;
std::vector<int> a;
std::vector<std::vector<int>> li;

int dfs(std::vector<int> vec = std::vector<int>(0)) {
	if(vec.size() == n) {
		int ret = 0;
		for(int i = 0; i < n; i++) {
			ret += a[vec[i]];
			
			for(int j = 0; j < i; j++) {
				ret -= li[vec[j]][vec[i]];
			}
		}
		
		return ret;
	}
	
	int mi = 1e9;
	for(int i = 0; i < n; i++) {
		for(int j = 0; j < vec.size(); j++) if(vec[j] == i) continue;
		vec.push_back(i);
		mi = std::min(mi, dfs(vec));
		vec.pop_back();
	}
	
	return mi;
}

int main(){
	cin >> n; a.resize(n); li.resize(n, std::vector<int>(n));
	for(int i = 0; i < n; i++) cin >> a[i];
	for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) cin >> li[i][j];
	
	cout << dfs() << endl;
	return 0;
}