結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 CE 0% 0ms 0KB
2 CE 0% 0ms 0KB
3 CE 0% 0ms 0KB
4 CE 0% 0ms 0KB
5 CE 0% 0ms 0KB
6 CE 0% 0ms 0KB
7 CE 0% 0ms 0KB
8 CE 0% 0ms 0KB
9 CE 0% 0ms 0KB
10 CE 0% 0ms 0KB
11 CE 0% 0ms 0KB
12 CE 0% 0ms 0KB
13 CE 0% 0ms 0KB
14 CE 0% 0ms 0KB
15 CE 0% 0ms 0KB
16 CE 0% 0ms 0KB
17 CE 0% 0ms 0KB
18 CE 0% 0ms 0KB
19 CE 0% 0ms 0KB
20 CE 0% 0ms 0KB
21 CE 0% 0ms 0KB
22 CE 0% 0ms 0KB
23 CE 0% 0ms 0KB
24 CE 0% 0ms 0KB
25 CE 0% 0ms 0KB
26 CE 0% 0ms 0KB
27 CE 0% 0ms 0KB
28 CE 0% 0ms 0KB
29 CE 0% 0ms 0KB
30 CE 0% 0ms 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 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];
	
	int dp[(1 << n)] = {};
	for(int i = 1; i < (1 << n); i++) dp[i] = 1e9;
	
	for(int i = 0; i < (1 << n); i++) {
		for(int j = 0; j < n; j++) {
			if((i >> j) & 1) continue;
			
			int tmp = a[j];
			for(int k = 0; k < n; k++) {
				if((i >> k) & 1) tmp -= li[k][j];
			}
			
			dp[i | (1 << j)] = std::min(dp[i | (1 << j)], dp[i] + tmp);
		}
	}
	
	cout << dp[(1 << n) - 1] << endl;
	return 0;
}