[题解]机器分配

Posted czy--blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[题解]机器分配相关的知识,希望对你有一定的参考价值。

原题链

解题思路:

DP, f$[i][j]$表示前$i$个公司分配$j$台机器所取得的最大利润。当前的最大利润为:前$i - 1$个公司分配$k$台机器所取得的最大利润加上当前第$i$个公司分配$j - k$台机器所取得的利润的总和,与之前取得的最大利润的较大值。所以可以得出:
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
",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
",ans[n][m]);
    print(n,m);
    return 0;
} 

以上是关于[题解]机器分配的主要内容,如果未能解决你的问题,请参考以下文章

网络流24题(好大的坑啊)

Azure 机器人微软Azure Bot 编辑器系列 : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorial(代码片段

GLSL 结构数组 - 内存分配/对齐

CCF201403-5 任务调度(100分题解链接)

golang 转到片段以观察运行时行为和内存分配

2018.02.03(机器分配,友好城市等)