求解最小机器重量设计问题B - RJ502求解最小机器重量设计问题

                      ***东北师范大学算法课在线习题11月18日***

Problem Description
设某一机器由n个部件组成,部件编号为1-n,每一种部件都可以从m个供应商处购得,供应商编号为1-m。设wij是从供应商j处购得的部件i的重量,cij是相应的价格。对于给定的机器部件重量和机器部件价格,计算总价格不超过cost的最小重量机器设计,可以在同一个供应商处购得多个部件。

Input
第1行输入3个整数n、m、cost,接下来n行输入wij(每行m个整数)最后n行输入cij(每行m个整数),这里1<=n、m<=100

Output
输出的第1行包括n个整数,表示每个对应的供应商编号,第2行为对应的重量。

Sample Input

3 3 7
1 2 3
3 2 1
2 3 2
1 2 3
5 4 2
2 1 2

Sample Output

1 3 1
4

思想:回溯(su)法固定模板

#include 

using namespace std;

int n,m,cost;
int w[105][105],c[105][105];
int ans[100],p[100];
int weight,value;
int minweight = 100000;
void dfs(int t)
{

    if(t==n+1&&value<=cost)
    {
        if(weight<minweight)
        {
         minweight = weight;
        for(int j=1;j<=n;j++)
            ans[j] = p[j];

        }
        return;
    }
    if(value<=cost){
    for(int i=1;i<=m;i++)
    {
        p[t] = i;
        weight+=w[t][i];
        value +=c[t][i];
        dfs(t+1);
        p[t] = 0;
        weight-=w[t][i];
        value -=c[t][i];
    }
    }
}
int main()
{
    cin>>n>>m>>cost;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        cin>>w[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        cin>>c[i][j];

    dfs(1);
    for(int i = 1;i<n;i++)
        cout<<ans[i]<<' ';
    cout<<ans[n]<<endl;
    cout<<minweight;
    return 0;
}

你可能感兴趣的:(求解最小机器重量设计问题B - RJ502求解最小机器重量设计问题)