From ffbfc9e2731735ff48e15d6054995efc79b0108d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Wed, 13 Mar 2024 15:41:42 +0800 Subject: [PATCH] 'commit' --- TangDou/AcWing/BeiBao/1013.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/TangDou/AcWing/BeiBao/1013.md b/TangDou/AcWing/BeiBao/1013.md index e847225..24632dc 100644 --- a/TangDou/AcWing/BeiBao/1013.md +++ b/TangDou/AcWing/BeiBao/1013.md @@ -343,13 +343,13 @@ int n; int m; int path[N], res[N]; int w[N][M]; -int Max; +int mx; // u:第几个公司 s:已经产生的价值 r:剩余的机器数量 void dfs(int u, int s, int r) { if (u == n + 1) { - if (s > Max) { - Max = s; + if (s > mx) { + mx = s; memcpy(res, path, sizeof path); } return; @@ -357,25 +357,23 @@ void dfs(int u, int s, int r) { for (int i = 0; i <= r; i++) { path[u] = i; - dfs(u + 1, s + w[u][i], r - i);//给u号公司分配i个机器 - // path[u] = 0; - //按照回溯法,此处应该写path[u]还原现场,但本题中即使不还原现场,path[u]也会被下一次循环所覆盖,所以这句可以省略掉 + dfs(u + 1, s + w[u][i], r - i); // 给u号公司分配i个机器 + path[u] = 0; } } int main() { - scanf("%d %d", &n, &m); + cin >> n >> m; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) - scanf("%d", &w[i][j]); + cin >> w[i][j]; dfs(1, 0, m); - printf("%d\n", Max); - //输出最优答案时的路径 + printf("%d\n", mx); + // 输出最优答案时的路径 for (int i = 1; i <= n; i++) printf("%d %d\n", i, res[i]); return 0; } - ``` \ No newline at end of file