赞
踩
1.题目描述:资源分配问题
某公司有3个商店A、 B、C,将5名员工分配给这3个商店。求分配给各商店各多少员工才能使公司的盈利最大
2.分析:
动态规划——它把已知问题分为许多阶段或许多子问题,然后按顺序求解各个子问题。在每种情况下,列出各种可能的局部解,然后根据某些条件,从局部解中挑选出那些有可能产生最优结果的解。
3.代码实现:
- #include <stdio.h>
- #define MAXN 10
- #define MAXM 10
- //问题表示
- int m=3,n=5;
- int v[MAXM][MAXN]={{0,0,0,0,0,0},{0,3,7,9,12,13},
- {0,5,10,11,11,11},{0,4,6,11,12,12}};//不计v[0]行
- //求解结果表示
- int dp[MAXM][MAXN];
- int pnun[MAXN][MAXN];
-
- void Plan(){
- int maxf,maxj;
- for(int j=0;j<=n;j++)
- dp[n+1][j]=0;
- for(int i=m;i>=1;i--){
- for(int s=1;s<=n;s++){
- maxf=0;
- maxj=0;
- for(int j=0;j<=s;j++){ //找该商店最优情况maxf和分配人数maxj
- if((v[i][j]+dp[i+1][s-j])>=maxf){
- maxf=v[i][j]+dp[i+1][s-j];
- maxj=j;}}
- dp[i][s]=maxf;
- pnun[i][s]=maxj;
- }}}
- void dispPlan(){ //输出最优分配方案
- int k,r,s;
- s=pnun[1][n];
- r=n-s; //r为余下的人数
- printf("最优资源分配方案如下:\n");
- for(k=1;k<=m;k++){
- printf(" %c商店分配%d人\n",'A'+k-1,s);
- s=pnun[k+1][r]; // 求下一个阶段分配的人数
- r=r-s; }
- printf(" 该分配方案的总盈利为%d万元\n",dp[1][n]);}
- int main(){
- Plan();
- dispPlan();}

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。