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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Walker_CodeGou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值