资源分配问题是考虑如何把有限分配给若干个工程的问题。参考《算法设计与分析》

下面直接贴代码:

//为了和书上的内容一致,我的变量名、变量所代表的意思和书上的几本一致
#include<iostream>
#include<vector>
#define  M 8  //可分配资源份额
#define  N 3  //工程项目个数 
using namespace std;
              //定义算法所需的数据结构
int G[N][M+1]={              //声明,赋值开辟了空间是可以的
{0,4,26,40,45,50,51,52,53},
{0,5,15,40,60,70,73,74,75},
{0,5,15,40,80,90,95,98,100}
};
int optg;     //最优分配时所得的总利润
int optq[N];  //最优分配时各项工程所得的份额

//算法的工作单元
 
int f[N][M+1];//前i项工程分配不同份额资源是可得到的最大利润
int d[N][M+1];//是使f[i][x]最大时,第i项工程分配的份额
int g[N];     //只分配前i项工程时,可得到的最大利润
int q[N];     //只分配前i项工程时,第i项工程最优分配份额
int optx;     //最优分配时的资源最优分配份额
int kk;        //最优分配时的工程项目的最大编号

void main(void)
{
//初始化
/*
G[N][M+1]={
{0,4,26,40,45,50,51,52,53},             //这样是错的,这样赋值没有开辟空间,需要new函数才可以
{0,5,15,40,60,70,73,74,75},             // 
{0,5,15,40,80,90,95,98,100}             //
};
*/

//第一阶段
for (int v=0;v<M+1;v++)
{
f[0][v]=G[0][v];
d[0][v]=v;
}
//其他阶段
int vv;
    int b_num;
for(int k=1;k<N;k++)
{
for(int i=0;i<M+1;i++)
{
int MAX_total=0;
for(int j=0;j<=i; j++)
{
              vv=G[k][j]+f[k-1][i-j];
              if(vv>MAX_total)
 {
 MAX_total=vv;
 b_num=j;
 }
}
f[k][i]=MAX_total;
d[k][i]=b_num;
}
int uu=0;
int a_num;
        for(int l=0;l<M+1;l++)
{
            if(f[k][l]>uu)
{
uu=f[k][l];
a_num=l;
}
}
g[k]=uu;
        q[k]=a_num;
}
//第一种细节处理方法 ,浪费空间
/*
int c_num=0;
int f_num;
for(int ll=0;ll<N;ll++)
{
       if(c_num<g[ll])
  {
  c_num=g[ll]; 
  f_num=ll;
  }
}
optg=c_num;
kk=f_num;
optx=q[f_num];
*/
//第二种细节处理方法
optg=g[0]; 
optx=q[0];
kk=0;
for(int i=1;i<N;i++)
{
if(optg<g[i])
{
optg=g[i];
optx=q[i];
kk=i;
}
}
    
    if(kk<N-1)///为什么要加这一步,这就是思路的缜密
{
for(int i=kk+1;i<N;i++)
{
optq[i]=0;
}
}

for(int u=N-1; u>=0; u--)
{
        optq[u]=d[u][optx];
optx=optx-optq[u];
}
for(int r=0;r<N;r++)
{
cout<<optq[r]<<endl;
}
cout<<"最高利润为:"<<optg<<endl;

}

为了更好的理解资源分配问题,特推荐http://blog.csdn.net/sophie_wise8/article/details/6142488 这篇博客和《算法设计与分析》143页

有资金4万元,投资A、B、C三个项目,每个项目的投资效益与投入该项目的资金有关。三个项目A、B、C的投资效益(万吨)和投入资金(万元)的关系见下表:

项目

投入资金

A

B

C

1万元

15万吨

13万吨

11万吨

2万元

28万吨

29万吨

30万吨

3万元

40万吨

43万吨

45万吨

4万元

51万吨

55万吨

58万吨

求对三个项目的最优投资分配,使总投资效益最大。

阶段k:每投资一个项目作为一个阶段;

状态变量xk:投资第k个项目前的资金数;

决策变量dk:第k个项目的投资;

决策允许集合:0≤dk≤xk

状态转移方程:xk+1=xk-dk

阶段指标:vk(xk,dk)见表中所示;

递推方程:fk(xk)=max{vk(xk,dk)+fk+1(xk+1)}

终端条件:f4(x4)=0

k=4,f4(x4)=0

k=3,0≤d3≤x3,x4=x3-d3

x3

D3(x3)

x4

v3(x3,d3)

v3(x3,d3)+f4(x4)

f3(x3)

d3*

0

0

0

0

0+0=0

0

0

1

0

1

0

0+0=0

11

1

1

0

11

11+0=11*

2

0

2

0

0+0=0

30

2

1

1

11

11+0=11

2

0

30

30+0=30*

3

0

3

0

0+0=0

45

3

1

2

11

11+0=11

2

1

30

30+0=30

3

0

45

45+0=45*

4

0

4

0

0+0=0

58

4

1

3

11

11+0=11

2

2

30

30+0=30

3

1

45

45+0=45

4

0

58

58+0=58*

k=2,0≤d2≤x2,x3=x2-d2

x2

D2(x2)

x3

v2(x2,d2)

v2(x2,d2)+f3(x3)

f2(x2)

d2*

0

0

0

0

0+0=0

0

0

1

0

1

0

0+11=11

13

1

1

0

13

13+0=13*

2

0

2

0

0+30=30*

30

0

1

1

13

13+11=24

2

0

29

29+0=29

3

0

3

0

0+45=45*

45

0

1

2

13

13+30=43

2

1

29

29+11=40

3

0

43

43+0=43

4

0

4

0

0+58=58

59

2

1

3

13

13+45=58

2

2

29

29+30=59*

3

1

43

43+11=54

4

0

55

55+0=55

k=1,0≤d1≤x1,x2=x1-d1

x1

D1(x1)

x2

v1(x1,d1)

v1(x1,d1)+f2(x2)

f1(x1)

d1*

4

0

4

0

0+59=59

60

1

1

3

15

15+45=60*

2

2

28

28+30=58

3

1

40

40+13=53

4

0

51

51+0=51

最优解为x1=4, d1*=1, x2=x1-d1=3, d2*=0, x3=x2-d2*=3, d3=3, x4=x3-d3=0,

即项目A投资1万元,项目B投资0万元,项目C投资3万元,最大效益为60万吨。

动态规划 资源分配问题相关推荐

  1. 动态规划--资源分配问题

    问题描述: 资源分配问题是将数量一定的一种或若干种资源(原木料.资金.设备或劳动力等)合理地分配给若干个使用者,使总收益最大. 例如,某公司有3个商店A.B.C,拟将新招聘的5名员工分配给这3个商店, ...

  2. 动态规划算法之资源分配问题及其空间优化方案

    资源分配问题:某厂根据计划安排,拟将n台相同的设备分配给m个车间,各车间获得这种设备后,可以为国家提供盈利Ci j(i台设备提供给j号车间将得到的利润,1≤i≤n,1≤j≤m).问如何分配,才使国家得 ...

  3. 资源分配问题(动态规划)

    //问题描述:资源分配问题 //某厂根据计划安排,拟将n台相同的设备分配给m个车间,各车间获得这种设备后,可以为国家提供盈利Ci j(i台设备提供给j号车间将得到的利润,1≤i≤n,1≤j≤m) . ...

  4. 6-1 求解资源分配问题(动态规划法)[PTA]

    [PTA] 6-1 求解资源分配问题(动态规划法) 某公司有3个商店A.B.C,拟将新招聘的5名员工分配给这3个商店,各商店得到新员工后,每年的赢利情况如下表所示,求分配给各商店各多少员工才能使公司的 ...

  5. 动态规划法求解资源分配问题

    问题描述 资源分配问题是将数量一定的一种或若干种资源(原材料.资金.设备或劳动力等),合理地分配给若干使用者,使总收益最大. 例如,某公司有3个商店A.B.C,拟将新招聘的5名员工分配给这3个商店,各 ...

  6. k8s调度过程中的资源分配问题

    想要明白调度过程中的资源分配问题,首先要明白一件事,k8s中的资源分配,是以Pod为单位的.而Pod本质上而言,其实就是一个进程.就像操作系统一样,进程是资源分配的最小单位. k8s解决的一个比较大的 ...

  7. FlexRay关注事项2_网络总线资源分配问题

    FlexRay关注事项2_网络总线资源分配问题 要了解总线资源的分类,需要了解几个技术前提,第一个就是Flexray的数据收发硬件机制: 被发送的数据首先到达数据主机进行数据确认,然后道道数据通信器, ...

  8. 因果推断16--市场营销中资源分配问题的直接异质因果学习(美团)

    题目:市场营销中资源分配问题的直接异质因果学习 Direct Heterogeneous Causal Learning for Resource Allocation Problems in Mar ...

  9. 动态规划解资源分配问题

    有资金4万元,投资A.B.C三个项目,每个项目的投资效益与投入该项目的资金有关.三个项目A.B.C的投资效益(万吨)和投入资金(万元)的关系见下表: 项目 投入资金 A B C 1万元 15万吨 13 ...

最新文章

  1. 阿里云rds for mysql平台介绍_阿里云RDS for MySQL实例创建账号和数据库?
  2. Rocksdb 与 TitanDb 原理分析 及 性能对比测试
  3. 你知道event库吗?教你如何写一个自己的event库
  4. GNS3 串口连接问题
  5. ITK:向索引添加偏移量
  6. js表单验证处理和childNodes 和children 的区别
  7. Qt工作笔记-自定义开关控件
  8. LIRe 源代码分析 2:基本接口(DocumentBuilder)
  9. ios 去掉底部状态栏,隐藏ios 9中的状态栏
  10. silverlight小结
  11. /etc/profile
  12. linux dprintk 日志,linux內核調試中的printk()函數詳解
  13. 神经网络加速器设计研究:GoSPA ISCA2021论文研读
  14. 2022年一级建造师《工程经济》模拟卷有解析
  15. 论治理与创新,2022 开放原子全球开源峰会 OpenAnolis 分论坛圆满落幕
  16. Delphi对象克隆技术
  17. 嵌入式linux时间同步,ntpdate的交叉编译
  18. case when then 后返回多个值
  19. 微信怎么彻底删除微信消息?
  20. 什么?朋友圈出现了叠中叠?教你三招轻松应对朋友圈折叠

热门文章

  1. 如何组建和管理测试团队
  2. java 删除指定文件夹内所有文件
  3. CleanMyMac X激活码免费版安装包MAC清理工具
  4. ESIM模型详解与Keras代码实现
  5. css布局的基本思想,流行的CSS思想之——浅析OOCSS
  6. 精准营销,如何构建一套完善的用户画像体系?
  7. 社会保障计算机考试证书查询,便利查|打开电子社保卡可查询职业资格证书啦!...
  8. PicoZense TOF 深度摄像头技术参数 | AIRCamera,DCAM710,DCAM100
  9. Winform自定义MessageBox
  10. 关于智慧团建忘记密码的解决方法