总公司拥有高效设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M
虽然是水题,恰巧写一下这种类似背包输出具体方案的
输出有多解,无语
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=100;
int n,m,f[N][N],a[N][N];
int b[N];
void solve(){
int i,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
for(k=0;k<=j;k++)
f[i][j]=max(f[i][j],f[i-1][j-k]+a[i][k]);
cout<<f[n][m]<<endl;
j=m;
for(i=n;i>=1;i--){
for(k=j;k>=0;k--)
if(f[i][j]==f[i-1][j-k]+a[i][k]){ b[i]=k; j-=k;break; }
}
for(i=1;i<=n;i++) cout<<i<<' '<<b[i]<<endl;
}
main(){
cin>>n>>m;
solve();
}