最小重量机器设计问题
来源:互联网 发布:什么是bp神经网络算法 编辑:程序博客网 时间:2024/06/08 14:26
设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得,设wi是从供应商j处购得的部件i的重量,cij是相应价格。尝试设计一个算法,给出总价格不超过c的最小重量机器设计。
输入:第一行有三个正整数n,m,c,接下来2n行,每行m个数,前n行是c,后n行是w。
输出,将计算的最小重量及每个部件的供应商输。
例子: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<iostream>
using namespace std;
bool Take(int n,int d,int *x,int **v)//约束条件,当前选入物品价格不超过d
{
int i,vsum=0;
for(i=1;i<n+1;i++)
vsum+=v[i][x[i]];
if(vsum>d)
return 0;
return 1;
}
void Backtrack(int n,int m,int d,int t,int wsum,int &bestw,int *x,int *bestx,int **w,int **v)
{
int i;
if(t>n)
{
if(wsum<bestw)
{
bestw=wsum;
for(i=1;i<n+1;i++)
bestx[i]=x[i];
}
return ;
}
for(i=1;i<n+1;i++)
{
x[t]=i;
wsum+=w[t][i];
if(Take(n,d,x,v))
Backtrack(n,m,d,t+1,wsum,bestw,x,bestx,w,v);
wsum-=w[t][i];
x[t]=0;
}
}
int main()
{
int n,m,d,i,j,wsum=0,bestw=100;
cin>>n>>m>>d;
int **v,**w;
int *x,*bestx;//存放商人序号
v=new int*[n+1];
w=new int*[n+1];
x=new int[n+1];
bestx=new int[n+1];
for(i=0;i<n+1;i++)//建立价值和重量两个二维数组,行数代表商品,列数代表商人
{
v[i]=new int[m+1];
w[i]=new int[m+1];
x[i]=0;
bestx[i]=0;
}
for(i=0;i<n+1;i++)
for(j=0;j<m+1;j++)
if(i==0||j==0)v[i][j]=0;
else cin>>v[i][j];
for(i=0;i<n+1;i++)
for(j=0;j<m+1;j++)
if(i==0||j==0)w[i][j]=0;
else cin>>w[i][j];
Backtrack(n,m,d,1,wsum,bestw,x,bestx,w,v);
cout<<bestw<<endl;
for(i=1;i<n+1;i++)
cout<<bestx[i]<<" ";
system("pause");
return 0;
}
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小机器重量设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题 java实现
- SDIBTOJ1350-最小重量机器设计问题
- SDIBT 1350 最小重量机器设计问题
- 回顾下最小重量机器设计问题
- 算法 最小重量机器设计问题
- 最小重量机器设计问题 回溯法
- C#通过DllImport引入dll中的C++非托管类
- 图解基础设施设计模式
- 关于就业、职业、事业【看完之后你的思路会清晰很多】一位资深经理人的职业生涯感悟
- DDMS无法查看data/data简单解决方法
- MyEclipse导入项目.java文件中文乱码问题
- 最小重量机器设计问题
- 木乃伊迷宫
- Step into Scala - 20 - 高阶函数
- java基础——多线程
- 【OpenCV】SIFT原理与源码分析:2.关键点搜索与定位
- Android开发在路上:少去踩坑,多走捷径(转载)
- shade 和 render的区别
- 上海地毯清洗公司-机器人地毯清洗方案方法价格流程说明
- 滚动笔记1