@@ -20,27 +20,17 @@ int maxp = 0, n = 0;
20
20
int city[10 ][105 ];
21
21
int C[10 ][10 ], T[10 ][10 ];
22
22
vi money;
23
+ int visited[15 ];
23
24
24
- void solve (vi v){
25
- vi uv;
26
- int curr = 0 , t = 0 , p = 0 ;
27
- v.push_back (0 );
28
- for (int i : v){
29
- t += T[curr][i];
30
- p -= C[curr][i];
31
- p += money[i]/city[i][t];
32
- curr = i;
33
- }
34
- maxp = max (p, maxp);
35
- v.pop_back ();
36
- for (int i = 1 ; i < n; i++)
37
- if (find (v.begin (), v.end (), i) == v.end ())
38
- uv.push_back (i);
25
+ void solve (int pos, int time, int profit){
39
26
40
- for (int i : uv){
41
- v.push_back (i);
42
- solve (v);
43
- v.pop_back ();
27
+ maxp = max (profit-C[pos][0 ], maxp);
28
+ for (int i = 1 ; i < n; i++){
29
+ if (visited[i] == 1 ) continue ;
30
+ visited[i] = 1 ;
31
+ int t = time+T[pos][i];
32
+ solve (i, t, profit-C[pos][i]+(money[i]/city[i][t]));
33
+ visited[i] = 0 ;
44
34
}
45
35
}
46
36
@@ -58,13 +48,10 @@ class TCSocks{
58
48
for (int i = 0 ; i < n; i++){
59
49
stringstream ss (cost[i]), st (time[i]);
60
50
for (int j = 0 ; j < n; j++){
61
- int k;
62
- ss>>k;
63
- C[i][j] = k;
64
- st>>k;
65
- T[i][j] = k;
51
+ ss>>C[i][j];
52
+ st>>T[i][j];
66
53
}
67
- }
54
+ }
68
55
69
56
for (string s : competitors){
70
57
stringstream ss (s);
@@ -76,11 +63,7 @@ class TCSocks{
76
63
}
77
64
}
78
65
79
- for (int i = 1 ; i < n; i++){
80
- vi s (1 , i);
81
- solve (s);
82
- }
83
-
66
+ solve (0 , 0 , 0 );
84
67
return maxp;
85
68
}
86
69
0 commit comments