1.HLOJ#411机器分配
要求资源分配的最大值,我们可以用二维数组f[i][j]来表示前i个公司得到j台机器后所得到的最大盈利值。
方程是:
f[i][j]=max(f[i][j],f[i-1][k]+a[i][j-k]);
我们要去枚举每一个i和j,因此用双重循环来解决,k表示第i个公司取的不取机器数,即1~i-1个公司取的机器数;f[i-1][k]表示前i-1个公司取k台机器的最大值,a[i][j-k]表示第i个公司取剩余的k台机器的利益,那么f[i-1][k]+a[i][j-k]表示的就是第i个公司不取k台机器所得到的最大值,当然,k也是用循环来枚举的。
其中,k就是划分的阶段,来进行枚举不用的机器
emm.......
有点绕,毕竟我感觉资源分配的博客是我一直相要写的,却一直不知道要怎么表达,因此写的有点绕,也只能在方程的基础上解释一下方程的意义了,那么结合代码也许可以更好理解一些:
#include<bits/stdc++.h>
using namespace std;
int a[1000][1000],f[1000][1000]={},n,m;
int main()
{
cin>>m>>n;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
cin>>a[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j