贪心算法—Problem G
题意
一部电梯,起始在0层,输入一组数据表示楼梯先后到达的层数。已知每向上一层时间为6s,下降一层4s,每到达一次指定的楼层就停留5s,求输入一组数据,输出走完这些楼层所需要的总时间。
解题思路
建立数组存储楼层,第一个数据肯定在0上直接乘6s;其余的建立循环遍历,比较与前一个楼层的大小并把两者之间的差值乘6或4;最后再加上每一个目的楼层停留的时间,即总时间。
感想
不知道此题是否属于贪心算法,但好像我的做法并不是贪心,但提交后AC了,也不知前后如果两个楼层相同的话是否应该再加停留时间,结果是第一次提交时WA,而注释掉那句代码后,AC了。所以可能要算上。
AC代码
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
int a[101];
while(cin>>n,n)
{
int i,j,count;
inttime = 0;
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
{
cin>>a[i];
}
j=0;
count=n;
time=a[j]*6;
for(i=1;i<n;i++,j++)
{
if(a[i]>a[j]) time+=(a[i]-a[j])*6;
else if(a[i]<a[j]) time+=(a[j]-a[i])*4;
}
time+=5*count;
cout<<time<<endl;
}
}