算法乍一看,是一个最优组合问题。

  但是实际上是一个二选一的问题,为什么呢?  我想原因是:中途换下楼途径具有更优解,则最开始就不应该使用这一种下楼途径。所以实际上是一个二选一的问题

   代码如下:

#include <iostream>

using namespace std;

int main(){
long n,m;
cin>>n>>m;
long t1,t2,t3,t4;
cin>>t1>>t2>>t3>>t4;
long mintime=0;
mintime = abs(n-m)*t1+2*t2+t3+abs(n-1)*t1;
mintime = min(mintime,abs(n-1)*t4);
cout<<mintime;
return 0;
}

    改代码的通过率为100%,但是我原本的代码通过率只有80%。代码如下:

#include <iostream>

using namespace std;

int main(){
int n,m;
cin>>n>>m;
int t1,t2,t3,t4;
cin>>t1>>t2>>t3>>t4;
int mintime=0;
mintime = abs(n-m)*t1+2*t2+t3+abs(n-1)*t1;
mintime = min(mintime,abs(n-1)*t4);
cout<<mintime;
return 0;
}

   原因在于,有20%的数据,可能会出现10万乘10万左右,数据量级在百亿左右,而int型的范围在:正负21亿左右