最小重量机器设计问题

来源:互联网 发布:刺客信条2mac 编辑:程序博客网 时间:2024/06/08 08:01

问题描述:
设某一机器由n个部件组成,每一种价格都可以从m个不同的供应商处购得。设wij是从供应商j处购得的部件i的重量,cij是相应的价格。 试设计一个算法,给出总价格不超过d的最小重量机器设计。
题目类型:回溯算法
代码如下:

/*该题traceback(num)中num代表的是第几个部件 */ #include<stdio.h>int n,m,d; int value[100][100],weight[100][100];int best[100]={0};//最佳选择方案int min=1000000;//最小重量 int b[100]={0};//当前的选择方案 int cur_weight=0;//当前总重量 int cur_value=0;//当前总价值 void traceback(int num){    int i;    if(num==n) {         if(cur_weight<min) {            min=cur_weight; //更新最小重量             for(i=0;i<n;i++)                best[i]=b[i]+1;//更新最佳选择方案,数组从0开始,输出要加1          }        return ;    }    for(i=0;i<m;i++) { //有m个供应商可供选择        b[num]=i;        cur_weight+=weight[num][i];        cur_value+=value[num][i];        if(cur_weight<min && cur_value<=d) //等号必须加             traceback(num+1);        cur_weight-=weight[num][i];        cur_value-=value[num][i];        b[num]=0;    }}int main(){    int i,j;    scanf("%d%d%d",&n,&m,&d);    for(i=0;i<n;i++) {        for(j=0;j<m;j++) {            scanf("%d",&value[i][j]);        }    }    for(i=0;i<n;i++) {        for(j=0;j<m;j++) {            scanf("%d",&weight[i][j]);        }    }    traceback(0);    printf("the min weight is %d\n",min);    for(i=0;i<n;i++) {        printf("%d ",best[i]);    }    printf("\n");    return 0;} 
0 0
原创粉丝点击