$\LARGE\color{orange}{刷题日记(算法提高课)}$
这道题是 AcWing 9. 分组背包问题 和 AcWing 12. 背包问题求具体方案 的综合
那两道题会了这道也不难,注意将物品体积理解成第 $i$ 个公司分配到的机器数量就行
#include <iostream>
using namespace std;
const int N = 15, M = 20;
int f[N][M], w[N][M];
int n, m;
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
cin >> w[i][j];
for(int i = n; i >= 1; i--)
for(int j = 1; j <= m; j++)
for(int k = 0; k <= m; k++)
if(j - k >= 0) f[i][j] = max(f[i][j], f[i + 1][j - k] + w[i][k]);
cout << f[1][m] << endl;
int k = m;
for(int i = 1; i <= n; i++)
{
for(int j = 0; j <= m; j++)//要考虑到不分配给该公司的情况
if(f[i][k] == f[i + 1][k - j] + w[i][j])
{
cout << i << " " << j << endl;
k -= j;
break;
}
}
return 0;
}