最小重量机器设计

来源:互联网 发布:网络银行交易规模 编辑:程序博客网 时间:2024/04/29 01:21

Description:设某一机器由n个部件组成,每一个部件都可以从m个不同的供应商处购得。设w[i][j]是从供应商j处购得的部件i的重量,c[i][j]是相应的价格。试设计一个算法,给出总价格不超过d的最小重量机器设计。

Input:3 3 4 //m, n, d 
  1 2 3 //c[i][j]
3 2 1
2 2 2
1 2 3 //w[i][j]
3 2 1
2 2 2

Output:4 //最小价格
1 3 1 //厂家路径

以下代码段代码精简~注释十分详细~为了少写代码还是动了些脑袋的~欢迎纠错~

/* * ===================================================================================== * *       Filename:  MinMachineWeight.cpp * *    Description:   * *        Version:  1.0 *        Created:  2015年12月18日 12时17分53秒 *       Revision:  none *       Compiler:  g++ * *         Author:  lafee, wisdomandmircle@gmail.com *        Company:  Class 1301 of Software Engineering * * ===================================================================================== */#include<iostream>#define N 1000using namespace std;intn, m, d, cp = 0, cw = 0, sum = 0 ;int c[N][N], w[N][N], path[N] ;bool CalMinMacWeight(int i){     if( i > n ){       if( cw < sum )         sum = cw ;       return true ;//已找到最优解,保证path[N]不被改变      }     for( int j = 1; j <= m; j++ ){         cw += w[i][j] ;         cp += c[i][j] ;         if( cw < sum && cp <= d )           if( CalMinMacWeight( i + 1 ) ) {           path[i] = j ;//记录当前所选厂家            return true ;//结束当前遍历            }         cw -= w[i][j] ;         cp -= c[i][j] ;     }     return false ;}int main(){    cin>>n>>m>>d;/*n:部件个数 *m:厂家个数 *d:最大承受价格(总价)  */     for( int i = 1 ; i <= n ; i++ )//第i个部件 for( int j= 1 ; j <= m ; j++ ) //第j个厂家         cin >> c[i][j] ;//价格     for( int i = 1 ; i <= n ; i++ ) {      for( int j = 1 ; j <= m ; j++ )        cin >> w[i][j] ;//质量       sum += c[i][1] ;//sum以第一个厂家为初始     }    CalMinMacWeight(1) ;    cout << sum << endl ;    for( int i = 1; i <=m ; i++ )    cout << path[i] << " " ;    return 0 ;}


参考:http://www.2cto.com/kf/201310/249984.html
2 0
原创粉丝点击