icpc 北京網路賽 1006 貪心演算法

2022-08-05 18:27:13 字數 816 閱讀 5800

網路賽結束,看了大神的**以後才寫出來的,這是一道貪心演算法,選區域性最優方案:就是相鄰兩個點不能直接到達做特別討論。易證:如果兩個點不能直接到達,那麼每次讓青蛙走兩步到達(l+1)的距離是最優選擇,如果現在青蛙的位置是now ,那麼到達now 的那一步走了step,然後對now 後面的那個點進行討論:如果length=stone[now+1]-stone[now],now+length<=l說明前一步可以到達now+1;這個時候更新now 的位置,試青蛙每一次都能夠儘量地跳得遠。這樣還要把第一次的幾種情況討論一下才能ac,至於複雜度,也只有o(2*10^5),只需要更新now的位置,所以只要遍歷一邊所有石頭的位置就好了

詳細看下面ac**:

#include

#include

#include

#include

#include

#include

using namespace std;

int n,m,l;

int stone[200010];

int cnt;

void solve()

step+=length;

now+=1;

}else if(length<=l)

else if(length>l)

else

}else

else}}

}printf("%d\n",cnt);

}int main()

stone[n+1]=m;

printf("case #%d: ",k);

solve();

}return 0;

}