问题描述:
95枪族是我国现役主力步枪之一。假设某95步枪由 n 个部件组成,每一种部件都可以从 m 个不同的供应商处购得。设 wij 是从供应商 j 处购得的部件 i 的重量,cij 是相应的价格。 试设计一个算法,给出总价格不超过 c 的最小重量步枪的部分采购方案。
编程任务:
对于给定的步枪部件重量和步枪部件价格,编程计算总价格不超过 d 的最小重量步枪设计。
数据输入:
输入数据第一行有 3 个正整数 n ,m 和 d。接下来的 2n 行,每行 m 个数。前 n 行是 c,后 n 行是 w。 1 <= n, m <= 20。
结果输出:
将计算出的最小重量输入,并输出每个部件的供应商。
样例输入:
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
代码实现:
#include <bits/stdc++.h>
using namespace std;
int n,m,d;
int c[999][999],w[999][999];
int cw=0,cp=0;
int bestw=999,bestp=999;
int x[999],bestx[999];
void LYN(int i)
{
if(i>n)
{
if(cp<=d&&cw<bestw)
{
bestw=cw;
bestp=cp;
for(int j=1; j<=n; j++)
bestx[j]=x[j];
}
}
else
{
for(int j=1; j<=m; j++)
{
x[i]=j;
cw=cw+w[i][j];
cp=cp+c[i][j];
if(cp<=d&&cw<bestw)
{
LYN(i+1);
}
cw=cw-w[i][j];
cp=cp-c[i][j];
}
}
}
int main()
{
cin>>n>>m>>d;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
cin>>c[i][j];
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
cin>>w[i][j];
LYN(1);
cout<<bestw<<endl;
for(int i=1; i<=n; i++)
cout<<bestx[i]<<" ";
return 0;
}
仅供学习,转发请注明出处!!