AcWing 1013. 机器分配-分组背包求具体方案
原题链接
简单
作者:
hai阿卢
,
2021-02-18 14:02:25
,
所有人可见
,
阅读 263
#include<iostream>
using namespace std;
const int N=110;
int f[N][N],v[N][N],w[N][N],s[N];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>w[i][j];
v[i][j]=j;
}
}
for(int i=n;i>=1;i--)
{
for(int j=0;j<=m;j++)
{
f[i][j]=f[i+1][j];
for(int k=1;k<=m;k++)
{
if(j>=v[i][k])
f[i][j]=max(f[i][j],f[i+1][j-v[i][k]]+w[i][k]);
}
}
}
cout<<f[1][m]<<endl;
int j=m;
for(int i=1;i<=n;i++)
{
bool flag=true;//用来记录该公司有没有分配到机器
for(int k=1;k<=m;k++)
{
if(j>=v[i][k]&&f[i][j]==f[i+1][j-v[i][k]]+w[i][k])
{
cout<<i<<" "<<k<<endl;
j-=v[i][k];
flag=false;
break;
}
}
if(flag) cout<<i<<" 0"<<endl;
}
return 0;
}