1266:【例9.10】机器分配
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 }