资源分配问题(动态规划)
2013-11-29 14:17
274 查看
//问题描述:资源分配问题 //某厂根据计划安排,拟将n台相同的设备分配给m个车间,各车间获得这种设备后,可以为国家提供盈利Ci j(i台设备提供给j号车间将得到的利润,1≤i≤n,1≤j≤m) 。 //问如何分配,才使国家得到最大的盈利?其中Cij为(0,1000)的随机数。要求输出10个实例 #include<iostream.h> #include<string.h> #include<stdlib.h> #include<time.h> #include<iomanip.h> #define N 30//设备数量 #define M 10//车间数量 #define T 5//实例个数,题目要求10个,但是控制台最大只能同时显示5个,因此这里设置为5 int main(){ // int t=T; while(t--){ //////////////////////////////////声明变量以及初始化 cout<<"第"<<T-t<<"个实例:"<<endl; srand((unsigned int)time(0)); //数组c存放i台机器分配给j号车间可获得的利润 //数组v存放i台机器分配给前j个车间可获得的最大的利润 //数组d存放分配给前j个车间的分配数 int C[N+1][M+1],V[N+1][M+1],D[N+1][M+1]; //初始化数组 memset(C,0,sizeof(int)); memset(V,0,sizeof(int)); memset(D,0,sizeof(int)); int i=0,j=0,k=0; ////////////////////////////这段代码随机产生并输出C[i][j]; cout<<"i台机器分配给j号车间可获得的利润:"<<endl; for(i=0;i<=M;i++){ cout<<setw(4)<<i; } cout<<endl; for(i=1;i<=N;i++){ cout<<setw(4)<<i; for(j=1;j<=M;j++){ C[i][j]=rand()%1000; cout<<setw(4)<<C[i][j]; } cout<<endl; } //////////////////////////////////////////////////////// //////这段代码顺推算出每增加第j号车间其前j-1个车间所分配的设备数D[i][j]; //////以及算出i台设备分配到j个车间的最大利润V[i][j]; for(i=1;i<=N;i++){ for(j=1;j<=M;j++){ for(k=0;k<=i;k++){ if(V[i][j]<V[k][j-1]+C[i-k][j]){ V[i][j]=V[k][j-1]+C[i-k][j]; D[i][j]=k; } } } } cout<<"最大利润为:"<<V [M]<<endl; /////////////////////////////////////////////////////////////// //从最后一个车间分配的设备数量(N-D[i][j])逆推到第一号车间分配的设备数量。 k=N; for(j=M;j>=1;j--){ cout<<"第"<<j<<"号车间分配了"<<k-D[k][j]<<"台设备。"<<endl; k=D[k][j]; } } return 0; }
相关文章推荐
- canvas.translate(x,y)一点新的认识
- wine安装
- android 获得ImageView中Image的绘制大小
- SQLSERVER的自定义函数,不支持使用exec sp_executesql与Exec()
- Visual Studio 2008提高工作效率的小技巧
- 自定义简单的ant task
- Python正则匹配多行,多个数据
- 安装apk到android虚拟机
- 【思路日志:并行任务】多进程/线程抓取信息
- 返回一个日期所属的周五
- POJ 1005 I Think I Need a Houseboat
- __thread关键字
- 古之成大事者必经三境界--王国维《人间词话》
- C语言动态分配二维数组
- apk权限和签名总结
- EMC笔试
- 哈工大中文篇章关系语料
- 记录未完成题目
- ORACLE RAC with NFS install
- 通过Html网页调用本地安卓(android)app程序代码