zoukankan      html  css  js  c++  java
  • 45-机器设计问题(深搜)

    机器设计问题 (20分)
    题目内容:
    设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设 wij 是从供应商j 处购得的部件i的重
    量,cij 是相应的价格。
    试设计一个回溯算法,给出总价格不超过d的最小重量机器设计。
    对于给定的机器部件重量和机器部件价格,计算总价格不超过d的最小重量机器设计。

    提示:该问题的解答同0-1背包问题类似。
    输入描述:
    第一行:3个整数n(部件),m(供应商),d(总价格),这些数据都小于100。
    接下来的2n行,每行m个数。前n行是c(价格),后n行是w(重量)。

    输出描述:
    第一行:最小重量。

    输入样例:
    3 3 4
    1 2 3
    3 2 1
    2 2 2
    1 2 3
    3 2 1
    2 2 2

    输出样例
    4

    #include <iostream>
    using namespace std;
    int n;
    int m;
    int V;
    int w[105][105];
    int v[105][105];
    int minw = 0xffffff;
    int mv, mw;
    
    int f(int i){
    	if(i == n){  //已近达到了n个不用再去搜索部件 
    		if(mw < minw){
    			minw = mw;
    //			return 0;
    		}
    		return 0; //搜索完毕退出 
    	}
    
    		for(int l = 0; l < m; l++){
    			 mv += v[i][l];
    			 mw += w[i][l];
    			 if(mv <= V && mw < minw)
    				 f(i + 1);
    			 mv -= v[i][l];
    			 mw -= w[i][l];
    		}
    }
    
    int main(){
    	
    	cin >> n >> m >> V;
    	for(int i = 0; i < n; i++){
    		for(int j = 0 ; j < m; j++)
    			cin >> v[i][j];
    	}
    	for(int i = 0; i < n; i++){
    		for(int j = 0 ; j < m; j++)
    			cin >> w[i][j];
    	}
    	f(0);
    	cout << minw;
    	return 0;
    }
    

      

  • 相关阅读:
    Java Web前后端分离的思考与实践
    JDBC剖析篇(1):java中的Class.forName()
    UVa1471
    Uva11572
    Uva11134
    Uva10755
    Floyd判圈法
    Java泛型-通配符的上限和下限问题
    Codeforces 384E-线段树+dfs序
    codeforcesRound378C-dfs+树状数组
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7922755.html
Copyright © 2011-2022 走看看