最小重量机器设计问题
来源:互联网 发布:北京幼儿园学费知乎 编辑:程序博客网 时间:2024/04/28 07:13
最小重量机器设计问题
设某一机器由n个部件组成,每一种价格都可以从m个不同的供应商处购得。设wij是从供应商j处购得的部件i的重量,cij是相应的价格。
试设计一个算法,给出总价格不超过d的最小重量机器设计。
样例输入
3 3 4
1 2 3
3 2 1
2 2 2
1 2 3
3 2 1
2 2 2
1 2 3
3 2 1
2 2 2
1 2 3
3 2 1
2 2 2
样例输出
4
1 3 1
1 3 1
解:
最小重量机器设计问题:
一共 n 个部件,每个部件可以从m个供应商处取得,
所以回溯每一件部件,假定每个部件的来源之后进行判定
一共n个部件从0开始,当t==n 时到达解空间,
进行判断 总价格小于d 并且重量最小
所以要在回溯过程中进行当前来源的标记,便于进行判断找出最优解。
#include <stdio.h>int n;int m;int d;int w[100][100];//重量 int p[100][100];//价格 int price,weight,min;int temp[100],best[100];void dfs(int t){if(t==n){if(price<=d && weight<min)//总价格小于d如果此时的重量小于当前最小重量,{min=weight;//保存此时的重量为最小重量 for(int i=0;i<n;i++)best[i]=temp[i] ;//此时的零件来源保存为最佳来源数组 }return ;}for(int i=0;i<m;i++){weight+=w[t][i];price+=p[t][i];temp[t]=i;if(price<=d && weight<min)//此时重量小于最小重量,并且满足价格小于d继续判断下个零件 dfs(t+1);weight-=w[t][i];price-=p[t][i];temp[t]=0;}}int main(){scanf("%d %d %d",&n,&m,&d);for(int i=0;i<n;i++){for(int j=0;j<m;j++){scanf("%d",&p[i][j]);}}for(int i=0;i<n;i++){for(int j=0;j<m;j++){scanf("%d",&w[i][j]);}}price=0;min=9999;weight=0;dfs(0);printf("%d\n",min);for(int i=0;i<n;i++){printf("%d ",best[i]+1);}printf("\n");}
0 0
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小机器重量设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题 java实现
- SDIBTOJ1350-最小重量机器设计问题
- SDIBT 1350 最小重量机器设计问题
- 回顾下最小重量机器设计问题
- 算法 最小重量机器设计问题
- 最小重量机器设计问题 回溯法
- 【JZOJ 4931】【NOIP2017提高组模拟12.24】A
- Listener 理解
- SpringMVC配置
- 基于Spark MLlib平台和基于模型的协同过滤算法的电影推荐系统(一) 协同过滤算法概述&&基于模型的协同过滤的算法思想(算法模型和结构待补充)
- linux yum及yum仓库
- 最小重量机器设计问题
- 简单装箱
- APACHE RANGER 调研----5.ranger 原理解析
- hello world!
- MVC 从入门到精通
- 常对象与常成员
- APACHE RANGER 调研----6.自定义RestApi 操作ranger 数据库
- 2016-11-25-raspbian-jessie镜像拓展root文件系统空间到全盘(Expend Filesystem)之后空间用完的解决方法
- 域名可用查询地址