机器分配
1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4 const int N=25;
5
6 int a[N][N],b[N][N],f[N][N];
7 void show(int r,int c){
8 if(!r)return;
9 show(r-1,c-f[r][c]);
10 printf("%d %d\n",r,f[r][c]);
11 }
12 int main(){
13 int n,m;
14 cin>>n>>m;
15 for(int i=1;i<=n;i++)
16 for(int j=1;j<=m;j++)
17 scanf("%d",&a[i][j]);
18 //dp算法
19 for(int i=1;i<=n;i++)
20 for(int j=1;j<=m;j++)
21 for(int k=j;k>=0;k--)//表示第i个公司分k台
22 if(a[i][k]+b[i-1][j-k]>b[i][j]){
23 b[i][j]=a[i][k]+b[i-1][j-k];
24 f[i][j]=k;
25 }
26 cout<<b[n][m]<<endl;
27 show(n,m);
28 return 0;
29 }