[题解]机器分配
原题链
解题思路:
DP, f
表示前
个公司分配
台机器所取得的最大利润。当前的最大利润为:前
个公司分配
台机器所取得的最大利润加上当前第
个公司分配
台机器所取得的利润的总和,与之前取得的最大利润的较大值。所以可以得出:
maxx = max(ans[i - 1][k] + value[i][j - k],maxx); a[i][j] = maxx;
---------------------------分析完毕--------------------------
源代码
#include <bits/stdc++.h> using namespace std; int a[50][50],ans[50][50],p[50],maxx; inline int print(int i,int j){ if(i == 0)return 0; for(int k = 0;k <= j;k++){ if(maxx == ans[i - 1][k] + a[i][j - k]){ maxx = ans[i - 1][k]; print(i - 1,k); printf("%d %d\n",i,j - k); break; } } } int main(){ int n,m; scanf("%d%d",&n,&m); for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++){ scanf("%d",&a[i][j]); } } for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++){ maxx = 0; for(int k = 0;k <= j;k++){ maxx = max(ans[i - 1][k] + a[i][j - k],maxx); ans[i][j] = maxx; } } } printf("%d\n",ans[n][m]); print(n,m); return 0; }
结束。OVO。