NYOJ 1070 詭異的樓梯(1)

2021-07-15 16:42:04 字數 1246 閱讀 1929

詭異的電梯【ⅰ】

時間限制:1000 ms | 記憶體限制:65535 kb

難度:3

描述 新的宿舍樓有 n(1≤n≤100000) 層 and m(1≤m≤100000)個學生. 在新的宿舍樓裡, 為了節約學生的時間也為了鼓勵學生鍛鍊身體, 所以規定該宿舍樓裡的電梯在相鄰的兩層之間是不會連續停下(即,如果在第2層停下就不能在第3層停下。).所以,如果有學生在相鄰的兩層之間要停下, 則其中的一部分學生必須選擇走樓梯來代替。規定:乙個人走下一層樓梯的花費為a,走上一層樓梯的花費為b。(1≤a,b≤100)現在請你設計乙個演算法來計算出所有學生走樓梯花費的最小費用總和。 所有的學生一開始都在第一層,電梯不能往下走,在第二層的時候電梯可以停止。

輸入 輸入有幾組資料t。t(1≤t≤10)

每組資料有n (1≤n≤100000),m(1≤m≤100000),a,b(1≤a,b≤100)。

接下來有m個數字表示每個學生想要停的樓層。

輸出 輸出看樣例。

思路:

d[i]表示走到第i層的最少費用,狀態轉移方程d[i]=min(d[i-1]+b*a[i],d[i-2]+mi*a[i-1]);

表示從到第i層,可以有兩種選擇,如果在第i-1層停了,那麼就不能在第i層停了,所以在第i層的人要從第i-1層走上去,如果在第i-2層停了,那麼第i-1層的人可以選擇從第i-2層上去或者從第i層下去,其中 mi=min(a,b)

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define mod 1000000007

#define pi acos(-1.0)

#define inf 0x3f3f3f3f

typedef

long

long ll;

int a[100005];

int d[100005];

int a,b,n,m,mi;

int x,t;

int ans;

int main()

if(n==1||n==2)ans=0;

else

ans=d[n];

}printf("case %d: %d\n",kase,ans);

}return

0;}

NYOJ 1070詭異的電梯

這道題是個dp,主要考慮兩種情況,剛開始我把狀態轉移方程寫成了dp i min dp i 1 a,dp i 1 b 後來想想當推到dp i 的時候,那個dp i 1 還沒有推出來,所以這種方式推導出來不對,後來又看到dp i min dp i 2 的所有情況最小值,dp i 3 的所有情況值 其中d...

詭異的樓梯

problem description hogwarts正式開學以後,harry發現在hogwarts裡,某些樓梯並不是靜止不動的,相反,他們每隔一分鐘就變動一次方向.比如下面的例子裡,一開始樓梯在豎直方向,一分鐘以後它移動到了水平方向,再過一分鐘它又回到了豎直方向.harry發現對他來說很難找到能...

詭異的樓梯

problem description hogwarts正式開學以後,harry發現在hogwarts裡,某些樓梯並不是靜止不動的,相反,他們每隔一分鐘就變動一次方向.比如下面的例子裡,一開始樓梯在豎直方向,一分鐘以後它移動到了水平方向,再過一分鐘它又回到了豎直方向.harry發現對他來說很難找到能...