【算法分析与设计】实验题

问题描述:
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 
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;
}

仅供学习,转发请注明出处!!

你可能感兴趣的:(算法,c++,数据结构)