当前位置:   article > 正文

【C语言】——资源分配问题实现_请使用c语言动态规划策略编写算法,实现资源分配问题。要求:输入资源个数与资金金

请使用c语言动态规划策略编写算法,实现资源分配问题。要求:输入资源个数与资金金

1.题目描述:资源分配问题

某公司有3个商店A、 B、C,将5名员工分配给这3个商店。求分配给各商店各多少员工才能使公司的盈利最大

2.分析:

动态规划——它把已知问题分为许多阶段或许多子问题,然后按顺序求解各个子问题。在每种情况下,列出各种可能的局部解,然后根据某些条件,从局部解中挑选出那些有可能产生最优结果的解。

3.代码实现:

  1. #include <stdio.h>
  2. #define MAXN 10
  3. #define MAXM 10
  4. //问题表示
  5. int m=3,n=5;
  6. int v[MAXM][MAXN]={{0,0,0,0,0,0},{0,3,7,9,12,13},
  7. {0,5,10,11,11,11},{0,4,6,11,12,12}};//不计v[0]行
  8. //求解结果表示
  9. int dp[MAXM][MAXN];
  10. int pnun[MAXN][MAXN];
  11. void Plan(){
  12. int maxf,maxj;
  13. for(int j=0;j<=n;j++)
  14. dp[n+1][j]=0;
  15. for(int i=m;i>=1;i--){
  16. for(int s=1;s<=n;s++){
  17. maxf=0;
  18. maxj=0;
  19. for(int j=0;j<=s;j++){ //找该商店最优情况maxf和分配人数maxj
  20. if((v[i][j]+dp[i+1][s-j])>=maxf){
  21. maxf=v[i][j]+dp[i+1][s-j];
  22. maxj=j;}}
  23. dp[i][s]=maxf;
  24. pnun[i][s]=maxj;
  25. }}}
  26. void dispPlan(){ //输出最优分配方案
  27. int k,r,s;
  28. s=pnun[1][n];
  29. r=n-s; //r为余下的人数
  30. printf("最优资源分配方案如下:\n");
  31. for(k=1;k<=m;k++){
  32. printf(" %c商店分配%d人\n",'A'+k-1,s);
  33. s=pnun[k+1][r]; // 求下一个阶段分配的人数
  34. r=r-s; }
  35. printf(" 该分配方案的总盈利为%d万元\n",dp[1][n]);}
  36. int main(){
  37. Plan();
  38. dispPlan();}

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/785074
推荐阅读
相关标签
  

闽ICP备14008679号