电梯调度算法
2016-05-20 21:53
260 查看
代码如下:
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include <iostream>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
using namespace std ;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
const int N = 10 ;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
int person[N+1] = {0 , 2 , 5 , 7 , 3 , 5 , 2 , 6, 2 , 6 , 3} ;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int floor2()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//先计算出在第一层停止的时候 所需要的花费
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int T = 0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int N1 = 0 ; //在第一层以下下的人数
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int N2 = person[1] ; //在第一层处下的人数
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int N3 = 0 ; //在第一层之上下电梯的人数
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int floor = 1 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(int i = 2 ; i <= N ;i++) //先计算出第1层停止需要爬取的楼层数目
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
T += person[i] * (i - 1) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
N3 += person[i] ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(int i = 2 ; i <= N ;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(N1 + N2 <= N3) //说明第i+1层的结果会大于第i层
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
T += N1 + N2 - N3 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
N1 += N2 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
N2 = person[i] ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
N3 -= person[i] ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
floor = i ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else //否则第i层的结果已经最小,故不需要计算第i+1层
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
break ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return floor ;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int floor1() //使用简单算法计算
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int tempfloor = 0 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int min = 6553 ;//存储最小值
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int floor = 1 ;//存储停靠的楼层
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int i , j ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for( i = 1 ; i <= N ;i++) //表示第i楼层电梯停靠
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
tempfloor = 0 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for( j = 1 ; j < i ;j++)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
tempfloor += (i - j) * person[j] ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(j = i + 1 ; j <= N ; j++)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
tempfloor += (j - i) * person[j] ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(min > tempfloor)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
min = tempfloor ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
floor = i ;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
// cout<<"tempfloor"<<i<<":"<<tempfloor<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return floor ;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int main()
![](http://www.cppblog.com/I<br/>9dc3<br/>mages/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int temp1 = floor1() ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int temp2 = floor2() ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<temp1<<" "<<temp2<<endl ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
getchar() ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return 0 ;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include <iostream>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
using namespace std ;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
const int N = 10 ;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
int person[N+1] = {0 , 2 , 5 , 7 , 3 , 5 , 2 , 6, 2 , 6 , 3} ;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int floor2()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//先计算出在第一层停止的时候 所需要的花费
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int T = 0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int N1 = 0 ; //在第一层以下下的人数
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int N2 = person[1] ; //在第一层处下的人数
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int N3 = 0 ; //在第一层之上下电梯的人数
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int floor = 1 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(int i = 2 ; i <= N ;i++) //先计算出第1层停止需要爬取的楼层数目
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
T += person[i] * (i - 1) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
N3 += person[i] ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(int i = 2 ; i <= N ;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(N1 + N2 <= N3) //说明第i+1层的结果会大于第i层
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
T += N1 + N2 - N3 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
N1 += N2 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
N2 = person[i] ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
N3 -= person[i] ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
floor = i ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else //否则第i层的结果已经最小,故不需要计算第i+1层
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
break ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return floor ;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int floor1() //使用简单算法计算
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int tempfloor = 0 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int min = 6553 ;//存储最小值
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int floor = 1 ;//存储停靠的楼层
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int i , j ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for( i = 1 ; i <= N ;i++) //表示第i楼层电梯停靠
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
tempfloor = 0 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for( j = 1 ; j < i ;j++)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
tempfloor += (i - j) * person[j] ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(j = i + 1 ; j <= N ; j++)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
tempfloor += (j - i) * person[j] ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if(min > tempfloor)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
min = tempfloor ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
floor = i ;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
// cout<<"tempfloor"<<i<<":"<<tempfloor<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return floor ;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int main()
![](http://www.cppblog.com/I<br/>9dc3<br/>mages/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int temp1 = floor1() ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int temp2 = floor2() ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<temp1<<" "<<temp2<<endl ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
getchar() ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return 0 ;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
相关文章推荐
- 文章标题
- 数据库索引详解
- HTTP协议:(3)HTTP响应和相关API、案例
- 分布式锁服务
- SQL Server Concurrency
- 《程序员面试笔试宝典》学习笔记(五)程序设计基础
- Hibernate初探【4】
- SM2算法第十九篇:秘钥交换协议交互了哪些参数?
- 网络地址转换NAT
- 关于《白鹿原》的所思所想
- HDU-4685-Prince and Princess(二分匹配+强连通分量)
- java并发-ReentrantLock的lock和lockInterruptibly的区别
- jQuery最基础最全面的选择器大览
- 第二阶段冲刺(一)
- Hbase过滤器Filter的使用心得(爬坑经验)
- hdu 1241 Oil Deposits
- 设计模式 - Decorator模式
- LeetCode 337
- LeetCode 55
- 括号配对问题