-
Notifications
You must be signed in to change notification settings - Fork 1
/
LCP 51. 烹饪料理.cpp
49 lines (38 loc) · 1.81 KB
/
LCP 51. 烹饪料理.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class Solution {
public:
bool visited[10];
int bestB = -1, bestM = -1;
bool judge(vector<int>& material, vector<int>& cookbook) {
for (int i = 0; i < material.size(); ++i) {
if (material[i] - cookbook[i] < 0) return false;
}
return true;
}
void dfs(vector<int>& materials, vector<vector<int>>& cookbooks, vector<vector<int>>& attribute, int limit, int mei, int bao) {
if (bao >= limit) {
if (mei > bestM) {
bestB = bao;
bestM = mei;
//return;!!!!!!!!!!!!! 注意不要有这一句,因为满足条件的有很多,我们还要找美味度最高的
}
//return; !!!!!!!!!!!!!! 注意不要有这一句,因为满足条件的有很多,我们还要找美味度最高的
}
for (int i = 0; i < cookbooks.size(); ++i) { //0 1 2
if (visited[i]) continue;
if (!judge(materials, cookbooks[i])) continue;
visited[i] = true;//!!!!!!!!!!!!!!!注意位置不要放在judge后continue的前边
vector<int> materialsTmp = materials;
for (int j = 0; j < 5; ++j) {
materialsTmp[j] = materialsTmp[j] - cookbooks[i][j];
}
dfs(materialsTmp, cookbooks, attribute, limit, mei + attribute[i][0], bao + attribute[i][1]);
visited[i] = false;
}
return;
}
int perfectMenu(vector<int>& materials, vector<vector<int>>& cookbooks, vector<vector<int>>& attribute, int limit) {
// memset(visited, 0, sizeof(visited));
dfs(materials, cookbooks, attribute, limit, 0, 0);
return bestM;
}
};