6-1 求解资源分配问题(动态规划法)
分数 10
全屏浏览题目
切换布局
作者 王东
单位 贵州师范学院
某公司有3个商店A、B、C,拟将新招聘的5名员工分配给这3个商店,各商店得到新员工后,每年的赢利情况如下表所示,求分配给各商店各多少员工才能使公司的赢利最大。
函数接口定义:
void Plan(); //求最优方案dp
裁判测试程序样例:
第一行输入商店数m及员工人数n,再依次输入m+1行,每行为n+1个数,每个数(i,j)表示i商店分配j人赢利值0≤i≤m,0≤j≤n。
输出格式:
输出前m行每行两个数,分别表示商店编号及分配人数,最后一行表示公司最大赢利。
输入样例1:
3 5
0 0 0 0 0 0
0 3 7 9 12 13
0 5 10 11 11 11
0 4 6 11 12 12
输出样例1:
3 3
2 2
1 0
21
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
void Plan()
{ pnum[m+1][n+1]={0};
dp[m+1][n+1]={0};
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{ int e=0;
for(int k=0;k<=j;k++)
{
int temp=dp[i-1][j-k]+v[i][k];
if(temp>dp[i][j])
{
dp[i][j]=temp;
e=k;
}
}
pnum[i][j]=e;
}
}
}