问题描述:
设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设 wij 是从供应商j 处购得的部件i的重量,cij 是相应的价格。试设计一个回溯算法,对于给定的机器部件重量和机器部件价格,计算总价格不超过c的最小重量机器设计。
代码:
1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4 using namespace std; 5 const int maxn=100; 6 7 int w[maxn][maxn]; 8 int c[maxn][maxn]; 9 int best[maxn]; 10 int b[maxn]; 11 int n,m,d; 12 int mi=0x3f3f3f3f; 13 int cost=0; 14 int wei=0; 15 16 void f(int num) 17 { 18 if(n==num) 19 { 20 if(wei<mi) 21 { 22 mi=wei; 23 for(int i=0;i<n;i++) 24 best[i]=b[i]+1; 25 } 26 return ; 27 } 28 29 for(int i=0;i<m;i++) 30 { 31 cost+=c[num][i]; 32 wei+=w[num][i]; 33 b[num]=i; 34 if(cost<=d && wei<mi) 35 f(num+1); 36 cost-=c[num][i]; 37 wei-=w[num][i]; 38 } 39 40 } 41 42 int main() 43 { 44 cin>>n>>m>>d; 45 for(int i=0;i<n;i++) 46 for(int j=0;j<m;j++) 47 cin>>c[i][j]; 48 for(int i=0;i<n;i++) 49 for(int j=0;j<m;j++) 50 cin>>w[i][j]; 51 f(0); 52 cout<<mi<<endl; 53 for(int i=0;i<n;i++) 54 cout<<best[i]<<" "; 55 cout<<endl; 56 57 }
输入示例:
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