top1编程
← 返回题目
题解

机器分配

1 条题解

  • 0
    @ 2026-7-29 2:10:57
    #include <bits/stdc++.h>
    using namespace std;
    
    int n, m; // n为分公司数量,m为设备数量
    int a[11][20]; // 每个分公司在获得不同数量设备的盈利
    int b[20]; // 当前设备分配方案
    int jians[20]; // 最佳设备分配方案
    int ans; // 最大盈利
    
    // 深度优先搜索(DFS)函数
    void dfs(int zhi, int b[], int qian, int k) {
        // 如果当前盈利超过记录的最大盈利,更新最大盈利和最佳分配方案
        if (qian > ans) {
            ans = qian;
            for (int i = 1; i <= n; i++) {
                jians[i] = b[i];
            }
        }
        // 如果没有剩余设备或已经处理完所有公司,结束递归
        if (zhi == 0) return;
        if (k == 0) return;
    
        // 尝试给公司k分配从0到zhi的设备数量
        for (int i = m; i >= 0; i--) {
            if (zhi >= i) {
                b[k] = i; // 给第k个公司分配i台设备
                dfs(zhi - i, b, qian + a[k][i], k - 1); // 递归处理剩下的设备和公司
                b[k] = 0; // 回溯
            }
        }
    }
    
    int main() {
        // 读取分公司和设备数量
        cin >> n >> m;
        // 读取盈利矩阵
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                cin >> a[i][j];
            }
        }
    
        // 调用DFS进行搜索
        dfs(m, b, 0, n);
    
        // 输出最大盈利及相应的分配方案
        cout << ans << endl;
        for (int i = 1; i <= n; i++) {
            cout << i << " " << jians[i] << endl;
        }
    
        return 0;
    }
    
    • 1