当前位置: 首页 > news >正文

回顾下最小重量机器设计问题

最小重量机器设计问题:设某一机器由N个部件组成,每一个部件都可以从M个不同的供应商处购得。设wij是从供应商j处购得部件i的重量,cij是相应的价格。试设计一个算法,给出总价格不超过C的最小重量机器设计。

(用C++写,算法为回溯法,数据输入法为手工输入)

  1 #include<iostream>
  2 using namespace std;
  3 #define N 50
  4 class MinWmechine
  5 {
  6     int n; //部件个数
  7     int m; //供应商个数
  8     int COST; //题目中的C
  9     int cw; //当前的重量
 10     int cc; //当前花费
 11     int bestw; //当前最小重量
 12     int bestx[N];
 13     int savex[N];
 14     int w[N][N];
 15     int c[N][N];
 16 public:
 17     MinWmechine();
 18     void machine_plan(int i);
 19     void prinout();
 20 };
 21 MinWmechine::MinWmechine()
 22 { 
 23 cw=0; //当前的重量
 24 cc=0; //当前花费
 25 bestw=-1; //当前最小重量
 26 bestx[N];
 27 savex[N];
 28 cout<<"请输入部件个数:";
 29 cin>>n;
 30 cout<<"请输入供应商个数:";
 31 cin>>m;
 32 cout<<"请输入总价格不超过:";
 33 cin>>COST;
 34 for(int j=0;j<m;j++)
 35 {
 36    for(int i=0;i<n;i++)
 37    {
 38     cout<<"请输入第 "<<j+1<<" 个供应商的第 "<<i+1<<" 个部件的重量:";
 39     cin>>w[i][j];
 40     cout<<"请输入第 "<<j+1<<" 个供应商的第 "<<i+1<<" 个部件的价格:";
 41     cin>>c[i][j];
 42     if(w[i][j]<0 || c[i][j]<0)
 43     {
 44       cout<<"重量或价钱不能为负数!\n";
 45       i=i-1;
 46     }
 47    }
 48 }
 49 }
 50 void MinWmechine::machine_plan(int i)
 51 {
 52 if(i>=n)
 53 {
 54    if(cw <bestw || bestw==-1)
 55   {
 56     bestw=cw;
 57     for(int j=0;j<n; j++) //把当前搜过的路径记下来
 58      savex[j]=bestx[j];
 59    }
 60    return;
 61 }
 62 for(int j=0; j<m; j++) //依次递归尝试每个供应商
 63 {
 64    if(cc+c[i][j]<COST)
 65    {
 66     cc+=c[i][j];
 67     cw+=w[i][j];
 68     bestx[i]=j;
 69     machine_plan(i+1);
 70     bestx[i]=-1;
 71     cc-=c[i][j];
 72     cw-=w[i][j];
 73    }
 74 }
 75 }
 76 void MinWmechine::prinout()
 77 {
 78 int i,j,ccc=0;
 79 for(j=0;j<m;j++)
 80 {
 81    for(i=0;i<n;i++)
 82    {
 83     cout<<""<<j+1<<" 供应商的第 "<<i+1<<" 部件重量:"<<w[i][j]<<" 价格:"<<c[i][j]<<"\n";
 84    }
 85 }
 86 for(j=0; j<n; j++)
 87 {
 88    bestx[j]=-1;
 89 }         
 90 machine_plan(0);
 91 cout<<"\n最小重量机器的重量是: "<<bestw<<endl;
 92 for(int k=0; k<n; k++)
 93 {
 94    cout<<""<<k+1<<" 部件来自供应商 "<<savex[k]+1<<"\n";
 95    ccc+=c[k][savex[k]];
 96 }
 97 cout<<"\n该机器的总价钱是: "<<ccc<<endl;
 98 cout<<endl;
 99 }
100 int main(void)
101 {
102    MinWmechine Y;
103    Y.prinout();
104    return 0;
105 }

转载于:https://www.cnblogs.com/sxzheng/archive/2013/05/10/3070585.html

相关文章:

  • python urlencode 编码
  • Core Data
  • c++两个类相互调用需要注意的问题
  • sizeof的主要用法
  • 多线程在VC下和linux下的应用
  • js中substring和substr的用法比较
  • 理解JavaScript定时器:setTimeout和setInterval
  • 13、jQueryMobile知识总结
  • 控件函数对话框上的控件的大小和位置随着对话框的大小的改变而变化
  • 线段树(多棵) HDOJ 4288 Coder
  • linux基础1
  • windons 安装ruby on rails
  • ChannelHandler adapters
  • 设置MySQL开机自动启动
  • [svc][op]关闭linux centos各种声音
  • SegmentFault for Android 3.0 发布
  • [数据结构]链表的实现在PHP中
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • “大数据应用场景”之隔壁老王(连载四)
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Angular 4.x 动态创建组件
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • oschina
  • Terraform入门 - 1. 安装Terraform
  • Travix是如何部署应用程序到Kubernetes上的
  • WePY 在小程序性能调优上做出的探究
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 删除表内多余的重复数据
  • 无服务器化是企业 IT 架构的未来吗?
  • 正则学习笔记
  • 国内开源镜像站点
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #QT项目实战(天气预报)
  • (C语言)字符分类函数
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (转)EOS中账户、钱包和密钥的关系
  • ***监测系统的构建(chkrootkit )
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .Net 垃圾回收机制原理(二)
  • .net 流——流的类型体系简单介绍
  • .NET 使用配置文件
  • .net实现客户区延伸至至非客户区
  • .Net中的设计模式——Factory Method模式
  • ?
  • @Autowired 与@Resource的区别
  • @Autowired和@Resource的区别
  • [.net] 如何在mail的加入正文显示图片
  • [Android] Upload package to device fails #2720
  • [Android学习笔记]ScrollView的使用
  • [HTML]Web前端开发技术7(HTML5、CSS3、JavaScript )CSS的定位机制——喵喵画网页
  • [Linux] 常用命令--版本信息/关机重启/目录/文件操作