资源分配问题
2016-04-25 11:44
267 查看
设有资源n(n为整数),分配给m个项目,gi(x)为第i个项目分得资源x(x为整数)所得的利润。求总利润最大的资源分配方案,也就是解下列问题:
max z = g1(x1)+g2(x2)+……+gm(xm)
x1+x2+……+xm = n, xi为整数,i=1,2,3,……,m
函数gi(x)以数据表的形式给出。
C++代码:
运行结果:
max z = g1(x1)+g2(x2)+……+gm(xm)
x1+x2+……+xm = n, xi为整数,i=1,2,3,……,m
函数gi(x)以数据表的形式给出。
C++代码:
#include <iostream> #define N 100 using namespace std; //a[.][.][0]存储原始数据 //a[.][.][1]存储存储动态规划过程 //a[.][.][2]存储最优化路径 int main() { //a[i][j]=k;表示前i个工程投资j所获得最大利润时给第i个工程分配的资源数 int a ; //gain记录第i个工程分配的资源数 int gain ; //f[i]表示当前投资总投资i时获得的最大利润 double f ; //pre_f[i]表示上一个项目投资总投资i时获得的最大利润 double pre_f ; //q[i]记录某个工程的利润表 double q ; cout<<"输入工程数:"; int m; cin>>m; cout<<"输入总资源数:"; int n; cin>>n; cout<<"输入第1个工程获得的利润表:"<<endl; for (int i=0;i<=n;++i) { cin >> q[i]; f[i] = q[i]; pre_f[i] = q[i]; a[1][i] = i; } cout<<endl; for (int k=2;k<=m;++k) { cout<<"输入第"<<k<<"个工程获得的利润表:"<<endl; for (int i=0;i<=n;++i) { cin >> q[i]; f[i] = 0; a[k][i] = 0; } for (int i=0;i<=n;++i) //i为总投资数 { cout<<"资源数为"<<i<<"时"<<endl; for (int j=0;j<=i;++j)//j为给第k个工程的投资数 { if (q[j] + pre_f[i-j] > f[i]) { a[k][i] = j; f[i] = q[j] + pre_f[i-j]; a[k][i] = j; } cout<<q[j] + pre_f[i-j]<<' '; } cout<<endl; } cout<<"当前最大利润表如下:"<<endl; for (int i=0;i<=n;++i) { pre_f[i] = f[i]; cout<<"f["<<i<<"]:"<<f[i]<<' '; } cout<<endl<<endl; } /*for (int i=1;i<=m;++i) { for (int j=1;j<=n;++j) { cout<<a[i][j]<<' '; } cout<<endl; } cout<<endl;*/ int rest = n; for (int i=m;i>=1;--i) { gain[i] = a[i][rest]; rest = rest-gain[i]; } for (int i=1;i<=m;++i) { cout<<"第"<<i<<"个项目投资"<<gain[i]<<endl; } cout<<"总利润:"<<f <<endl; return 0; } // 3 7 // 0 0.11 0.13 0.15 0.21 0.24 0.30 0.35 // 0 0.12 0.16 0.21 0.23 0.25 0.24 0.34 // 0 0.08 0.12 0.20 0.24 0.26 0.30 0.35 // 0 0.11 0.13 0.15 0.21 0.24 0.30 0.35 0 0.12 0.16 0.21 0.23 0.25 0.24 0.34 0 0.08 0.12 0.20 0.24 0.26 0.30 0.35
运行结果:
相关文章推荐
- 【.net 深呼吸】自定义缓存配置(非Web项目)
- linux设置定时任务
- hp prodesk 498g2 mt 升级win10后网卡红叉叉,灯不闪烁
- Google protocol buffers 小结(二)
- C/C++ volatile让你看的更明白
- LeetCode 215. Kth Largest Element in an Array
- rpm命令汇总
- SVN提交改动时报错You must input more than 5 chars as comment!
- 关于Weex你需要知道的一切
- linux top命令详解
- 论div,button,input点击跳转页面不同window.open()
- OpenCv学习笔记(四)--Mat基本图像容器Mat对象信息头,矩阵体的创建,深复制,浅复制详解
- apache本地配置多域名(wampserver本地配置多域名)
- kafka简单安装部署
- centos 7安装jdk和elk
- Android 项目 UI混乱,Button变大,解决方案
- 阿里云ecs云服务器安装wdcp控制面板教程(推荐CentOS6.5)
- 阿里百川与极客邦科技达成战略合作 Weex宣布开源
- C#日期时间格式化
- iOS: 在键盘之上显示一个 View