首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

动态规划资源最优分配算法用C++实现解决方法

2012-02-29 
动态规划资源最优分配算法用C++实现各位高手帮帮忙啊,谢谢!!![解决办法]没有instance,无法回答。C/C++ code

动态规划资源最优分配算法用C++实现
各位高手帮帮忙啊,谢谢!!!

[解决办法]
没有instance,无法回答。

C/C++ code
//运输或资源分配类问题,其实很好理解,我们找张纸,先把数据按照这个格式抄下来//最后一列是供应数,最后一行是需求数2    1    3    2    601    3    2    1    403     4    1    1    5020    35    33    34//第一步,找到价格是最低的,1块钱的//第一行第二列,产是60,需是35,//把60个产量,拿35个满足之;//可以分配的产量就是25//需求就是0了,表就变成了下边2    1    3    2    [25]1    3    2    1    403     4    1    1    5020    [0]    33    34//重复这个过程,直到产方全是0,或者供方全是0//就完成了。
[解决办法]
C/C++ code
#include<iostream>using namespace std; #define M 10    //  最多资源份量#define N 10    //  最多工程数量 int g[M+1][N];  //        资源分配利润函数int solve[N];      // 最优分配方案int m, n;              //     资源数与工程数 int dp(){        int f[M+1][N];  //        资源分配最多利润        int d[M+1][N];  //        资源分配方案        int best;                     //     资源分配最优方案可得利润best,        int bi, bj;          //   最优时资源分配给了前bi个项目,共分配bj份资源        int i,j,k;         //      先得到只有第一个工程时的利润        for(i=0; i<=m; i++){                f[0][i] = g[0][i];                d[0][i] = i;        }         //      计算n个工程的资源分配表        for(i=1; i<n; i++){                f[i][0] = g[i][0] + f[i-1][0], d[i][0] = 0;     //   当为0时解直接相加                for(j=1; j<=m; j++){                        f[i][j] = f[i][0], d[i][j] = 0; //       初始化为不分配给该工程资源时的解                        for(k=0; k<=j; k++){        //  计算分配给其若干个资源时的最优解                                if(f[i-1][j-k] + g[i][k] > f[i][j]){                                        f[i][j] = f[i-1][j-k] + g[i][k];                                        d[i][j] = k;                                }                        }                }        }         //      寻找最优分配方案        for(i=0; i<n; i++){                for(j=0; j<=m; j++){                        if(f[i][j]>best){                                best = f[i][j];                                bi = i, bj = j;                        }                }        }         //      计算每个工程各消耗多少资源        memset(solve, 0, sizeof(solve));        k = bj;        for(i=bi; i>=0; i--){   // bi以后的项目都不用分配                solve[i] = d[i][k];                k-=solve[i];        }         return best;} int main(){        int i,j;         cin>>m>>n;               for(i=0; i<n; i++){                for(j=0; j<=m; j++){                        cin>>g[i][j];                }        }         cout<<"最优分配方案可得利润:"<<dp()<<endl;         cout<<"最优分配方案:"<<endl;        for(i=0; i<n; i++){                cout<<"工程"<<(i+1)<<"分配:"<<solve[i]<<"资源"<<endl;        }         return 0;}
[解决办法]
你这个例子有问题,因为用眼睛都能看出来,把资源全部都给第3个是最好的。
下面的代码,可以求出任意组合的最大值。

JScript code
 <SCRIPT LANGUAGE="JavaScript">var value=[[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]];var count=[0,0,0];var maxValue=0;var result=""; function F(c,sumValue) {    if(c==8){        if(sumValue>maxValue){            maxValue=sumValue;            result=count.toString();                    }    return;    }    for(var x=0;x<3;x++){                 F(c+1,sumValue+value[x][++count[x]] );         count[x]--;     } } F(0,0);alert( "方案是:" + result+ "最大利润是:"+ maxValue ); </SCRIPT> 

热点排行