原料厂选择问题
2012-05-08 17:32
162 查看
问题描述:
12个工厂分布在一条东西向高速公路的两侧,工厂距离公路最西端的距离分别是0、4、5、10、12、18、27、30、31、38、39、47.在这12个工厂中选取3个原料供应厂,使得剩余工厂到最近的原料供应厂距离之和最短,问应该选哪三个厂 ?
问题解答:
拿到题目后本想使用动态规划来做,怎奈感觉运用不上,只好采取枚举的笨方法。若有好的方法还望指教,下面枚举的程序:
12个工厂分布在一条东西向高速公路的两侧,工厂距离公路最西端的距离分别是0、4、5、10、12、18、27、30、31、38、39、47.在这12个工厂中选取3个原料供应厂,使得剩余工厂到最近的原料供应厂距离之和最短,问应该选哪三个厂 ?
问题解答:
拿到题目后本想使用动态规划来做,怎奈感觉运用不上,只好采取枚举的笨方法。若有好的方法还望指教,下面枚举的程序:
#include <iostream> #include <math.h> #include <stdlib.h> using namespace std; #define N 12 #define M 3 #define MAX 100000000 int get_min(int* ch) { int min = ch[0]; for (int i = 1; i < M; i++) { if (min > ch[i]) { min = ch[i]; } } return min; } int choose(int* coor, int* ch) { int dis = 0; int dis_M[M] = {0}; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { dis_M[j] = abs(coor[i] - coor[ch[j]]); } dis += get_min(dis_M); } return dis; } int main() { int coor = {0, 4, 5, 10, 12, 18, 27, 30, 31, 38, 39, 47}; int chos[M]; int chos_tmp[M]; int dis = MAX; for (int i = 0; i < N - 2; i++) { chos_tmp[0] = i; for (int j = i + 1; j < N - 1; j++) { chos_tmp[1] = j; for (int z = j + 1; z < N; z++) { chos_tmp[2] = z; int dis_tmp = choose(coor, chos_tmp); if (dis_tmp < dis) { dis = dis_tmp; for (int y = 0; y < M; y++) { chos[y] = chos_tmp[y]; } } } } } for (int y = 0; y < M; y++) { cout << coor[chos[y]] << "\t"; } cout << endl; cout << "dis: " << dis << endl; return 0; }
相关文章推荐
- [经典面试题][腾讯]选择原料工厂(最短距离问题)
- [经典面试题][腾讯]选择原料工厂(最短距离问题)
- 解决windows开机选择用户登陆问题
- CC2430的串口的位置1或2选择问题
- android 4.3选择图片“无法加载图片问题”
- 解决ListView内置选择框复用混乱的问题
- Eclipse与MyEclipse的选择问题
- 关于.net中的dropdownlist控件绑定hashtable和时间控件选择问题
- 《算法之美》---次序选择问题
- 大数据架构和模式(五)——对大数据问题应用解决方案模式并选择实现它的产品
- 每日学习总结:DropDownList是否已选择验证、存储过程参数为sql字符串问题、将截断字符串或二进制数据。\r\n语句已终止
- 根据马甲、应用商店、统计每天的注册量,要求可以根据选择马甲和app,马甲和appstrore和user_login不同表问题
- 任务选择问题(贪心算法)
- Android项目技术总结:项目中选择任务的联系人引出android的spinner的监听问题
- 选择海外空间不能忽视的五个问题
- C#生成配置选择release编译后仍然是debug(或者配置debug编译后仍是release)的问题解决--日志记录
- Android开发环境选择的一些问题
- 解决小米2s手机 select选择框问题
- WSAStartup的版本选择问题
- 双目视觉的摄像头选择问题