結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 2ms 8416KB
2 AC 100% 1ms 8672KB
3 AC 100% 2ms 8112KB
4 AC 100% 1ms 8704KB
5 AC 100% 2ms 8432KB
6 AC 100% 6ms 8416KB
7 AC 100% 2ms 8272KB
8 AC 100% 2ms 8432KB
9 AC 100% 2ms 8016KB
10 AC 100% 2ms 8432KB
11 AC 100% 400ms 7984KB
12 AC 100% 38ms 8720KB
13 AC 100% 327ms 7968KB
14 AC 100% 42ms 8432KB
15 AC 100% 41ms 7648KB
16 AC 100% 2ms 7488KB
17 AC 100% 2ms 8272KB
18 AC 100% 2ms 8016KB
19 TLE 0% 3228ms 7792KB
20 TLE 0% 6762ms 8448KB
21 AC 100% 2ms 8112KB
22 TLE 0% 20002ms 0KB
23 AC 100% 6ms 8432KB
24 TLE 0% 20001ms 0KB
25 TLE 0% 4181ms 7248KB
26 TLE 0% 20002ms 0KB
27 TLE 0% 20002ms 0KB
28 TLE 0% 3267ms 8048KB
29 TLE 0% 20002ms 0KB
30 TLE 0% 20002ms 0KB

ソースコード

#include<bits/stdc++.h>
using namespace std;

#define INF 184497440737095

long long N, a[20][20], t[20], temp[20][20], mimi= INF;
int data[20][20];

long long foo(long long int te[],long long int x, long long tt){//cout<<endl<<x<<endl;
	if(x > N-1){ mimi = min(mimi, tt);return 0;}
	if(tt >= mimi)return INF;
	long long ans = INF, te2[20] = {}, te3[20]={};
	long long co=0, te4;
	for(int i = 0; i < N; i++){//cout<<te[i]<<endl;
		te2[i]=te[i];
		if(te[i]==1)te3[co++] = i;
	}
	for(int i = 0; i < N; i++){
		if(te[i]==1)continue;
		int ma = 0;
		for(int j = 0; j < co; j++){//cout<<"   "<<j<<" "<<i<<" "<<a[j][i]<<endl;
			ma+=a[te3[j]][i];
		}//cout<<endl;
		
		te4 =t[i]-ma;
		//if(te4+tt >= mimi)continue;
		//cout<<te4<<" "<<t[i]<<" "<<i<<" "<<ma<<endl;
		te2[i]=1;
		ans = min(foo(te2, x+1, te4+tt)+te4, ans);
		te2[i]=0;
	}
	if(ans==0)ans = INF;
	return ans;
}
int main(){
	cin>>N;
	for(int i = 0; i < N; i++)cin>>t[i];
	for(int i = 0; i < N; i++){
		for(int j = 0; j < N; j++){
			cin>>a[i][j];
		}
	}
	/*for(int i = 0; i < N; i++){
		for(int j = 0; j < N; j++){
			int ma = 0;
			for(int k = 0; k < j; k++){
				if(ma < a[k][j])ma=a[k][j];
			}
			
		}
	}*/
	long long int te[20] = {};
	cout<<foo(te, 0, 0)<<endl;
	return 0;
}