每次计算时间的消耗都需要依靠上一次的值,再加上本次的时间消耗。这是动态规划的特性。
递推式为:
v[i],表示电梯到第i次停靠时的时间消耗值。a[i],表示第i次电梯的停靠楼层。
v[i] = v[i-1] + abs(a[i] -a[i-1])*6+5 当电梯向上升
v[i] = v[i-1] + abs(a[i] -a[i-1])*4+5 当电梯向下降
示例代码:
1 #include <iostream> 2 using namespace std; 3 int v[100]; 4 int add(int *a,int size) 5 { 6 memset(v,0,sizeof(v)); 7 v[0] = a[0]*6+5; 8 int i=0; 9 for(i=1;i<size;i++) 10 { 11 if(a[i-1] > a[i]) 12 v[i] =v[i-1] + abs(a[i-1] -a[i])*4 +5; 13 else 14 v[i] =v[i-1] + abs(a[i-1] -a[i])*6 +5; 15 } 16 return v[i-1]; 17 } 18 int main() 19 { 20 int num; 21 while(cin>>num && num) 22 { 23 int *a = new int[num]; 24 for(int i=0;i<num;i++) 25 cin >> a[i]; 26 cout << add(a,num)<<endl; 27 delete [] a; 28 } 29 return 0; 30 }