简单的dfs题:
1
/*
2
ID: mercury2
3
LANG: C++
4
PROG: holstein
5
*/
6
7
#include <iostream>
8
9
using namespace std;
10
11
int m,n,t;
12
int v[30],vi[30][30],vn[30];
13
int total,p[30],ni[30];
14
bool s[30];
15
16
bool check(){
17
for (int i = 0; i < m; i++){
18
if(p[i] < v[i]) return false;
19
}
20
return true;
21
}
22
23
void search(int k,int depth){
24
if(check() && depth < total){
25
total = depth;
26
t = 0;
27
for (int i = 0; i < n; i++) if(s[i]) ni[t++] = i+1;
28
// for (int i = 0; i < m; i++) cout << p[i] << " ";
29
// cout << total << endl;
30
return;
31
}
32
33
for (int i = k+1;i < n; i++){
34
for (int j = 0; j < m; j++) p[j]+=vi[i][j];
35
s[i] = true;
36
search(i,depth+1);
37
for (int j = 0; j < m; j++) p[j]-=vi[i][j];
38
s[i] = false;
39
}
40
}
41
42
int main(){
43
freopen("holstein.in","r",stdin);
44
freopen("holstein.out","w",stdout);
45
46
cin >> m;
47
for (int i = 0; i < m; i++) cin >> v[i];
48
cin >> n;
49
for (int i = 0; i < n; i++)
50
for (int j = 0; j < m; j++)
51
cin >> vi[i][j];
52
53
total = 100;
54
memset(vn,0,sizeof(vn));
55
memset(p,0,sizeof(p));
56
memset(s,false,sizeof(s));
57
58
59
for (int i = 0; i < n; i++){
60
for (int j = 0; j < m; j++) p[j]+=vi[i][j];
61
s[i] = true;
62
search(i,1);
63
for (int j = 0; j < m; j++) p[j]-=vi[i][j];
64
s[i] = false;
65
}
66
67
cout << total <<" ";
68
69
t = 0;
70
71
for (int i = 0; i < total-1; i++) cout << ni[i] <<" ";
72
cout << ni[total-1] << endl;
73
74
return 0;
75
}
76
77
/*2
ID: mercury23
LANG: C++4
PROG: holstein5
*/6

7
#include <iostream>8

9
using namespace std;10

11
int m,n,t;12
int v[30],vi[30][30],vn[30];13
int total,p[30],ni[30];14
bool s[30];15

16
bool check(){17
for (int i = 0; i < m; i++){18
if(p[i] < v[i]) return false;19
}20
return true;21
}22

23
void search(int k,int depth){ 24
if(check() && depth < total){25
total = depth;26
t = 0;27
for (int i = 0; i < n; i++) if(s[i]) ni[t++] = i+1;28
// for (int i = 0; i < m; i++) cout << p[i] << " ";29
// cout << total << endl;30
return;31
}32

33
for (int i = k+1;i < n; i++){34
for (int j = 0; j < m; j++) p[j]+=vi[i][j];35
s[i] = true;36
search(i,depth+1);37
for (int j = 0; j < m; j++) p[j]-=vi[i][j];38
s[i] = false;39
}40
}41

42
int main(){43
freopen("holstein.in","r",stdin);44
freopen("holstein.out","w",stdout);45
46
cin >> m;47
for (int i = 0; i < m; i++) cin >> v[i];48
cin >> n;49
for (int i = 0; i < n; i++)50
for (int j = 0; j < m; j++) 51
cin >> vi[i][j];52
53
total = 100;54
memset(vn,0,sizeof(vn));55
memset(p,0,sizeof(p));56
memset(s,false,sizeof(s));57
58
59
for (int i = 0; i < n; i++){60
for (int j = 0; j < m; j++) p[j]+=vi[i][j];61
s[i] = true;62
search(i,1);63
for (int j = 0; j < m; j++) p[j]-=vi[i][j];64
s[i] = false;65
}66

67
cout << total <<" ";68
69
t = 0;70
71
for (int i = 0; i < total-1; i++) cout << ni[i] <<" ";72
cout << ni[total-1] << endl;73
74
return 0;75
}76
77



浙公网安备 33010602011771号