SHAOXIAOJ正在加载中...

2635: 回溯法-最小机器重量设计问题

金币值:3 定数:9 时间限制:1.000 s 内存限制:128 M
正确:2 提交:2 正确率:100.00% 命题人:
点赞量:0 收藏量:0 题目类型:程序 知识点: 算法设计

题目描述

假设生产一台机器需要n个不同的零件,每个零件可以从m个不同的供应商购买。设wij表示第i个零件从供应商j购买的重量,cij表示第i个零件从供应商j购买的价格。设计一个算法,要求给出总价格不超过d的最小重量机器设计,用回溯法。

测试代码   复制

#include <stdio.h>

int n,m,d; //表示机器有n个零件,每个零件有m个不同的厂家生产,总成本不超过d

int c[100][100]; //成本矩阵,0号单元不用
int w[100][100]; //重量矩阵,0号单元不用
int x[100]; //当前解向量,0号单元不用
int bestx[100]; //最好的解向量,0号单元不用

int cw;//当前重量
int cc;//当前成本
int bestw;//当前最小的机器重量

void input();
void Backtrack(int i);

void input() {
	
	int i, j;

	scanf("%d %d %d", &n,&m,&d);

	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			scanf("%d", &c[i][j]);
		}
	}

	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			scanf("%d", &w[i][j]);
		}
	}
}

void Backtrack(int i) {
	
	if(i>n) {		
		
	}
	else {
		for(int j = 1; j <= m; j++) {
			
		}	
	}	
}

int main(void) {
	cc=0;
	cw=0;
	bestw=32767; //假设最大的整数用32767来表示 
	input();
	Backtrack(1);
	printf("%d\n",bestw);
	for(int i=1; i<=n; i++) printf("%d ",bestx[i]);
	return 0;
}

输入格式

第1行输入3个整数,分别表示机器零件总的个数n,供应商个数m,以及机器的最大价格d
接下来的n行m列,分别表示第i个零件来自第j个供应商的价格 cij
再接下来的n行m列,分别表示第i个零件来自第j个供应商的重量 wij

输出格式

第1行输出最小机器重量
第2行输出最小机器重量每个零件的生产厂家编号(从1开始编号)

输入样例    复制

3 3 4
1 2 3
3 2 1
2 2 2
1 2 3
3 2 1
2 2 2

输出样例    复制

4
1 3 1

提示

思考:本题是0-1背包问题以及N后问题之间有什么关系?