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

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

網路賽結束,看了大神的**以後才寫出來的,這是一道貪心演算法,選區域性最優方案:就是相鄰兩個點不能直接到達做特別討論。易證:如果兩個點不能直接到達,那麼每次讓青蛙走兩步到達(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;

}

2018北京網路賽A題

一道搜尋題寫了好久沒寫出來 一直拖到現在才補起來 題目不難 只是有一些地方以前沒注意過 現把幾點要注意的指出來 一 因為每一次移動可能耗時1也可能耗時2 所以不能用單純的佇列 需要用優先順序佇列 二 因為氧氣罐數量的不同而導致狀態的不同 需要三維的陣列來記錄狀態 三 為了 的簡潔 把v陣列的判斷和賦...

2015北京網賽 G Boxes bfs

題目大意 給你n n 8 個互不相同的數,問進行多少次操作後能讓這些數變成公升序,無法變成就輸出 1,具體操作是,每個數只能每次只能移動到與他相鄰的空位或者比他大的數上。如 2,1,3 可以通過 2,1 3 2,1 3 1 2 3 1,2,3 這4次變換達到。思路 就是狀態壓縮之後的bfs了,用乙個...

acm 2018北京網路賽B題

這個題的題意就是給n n 10個字串,長度不超過8,但是n個字串每乙個都可以組成乙個環,然後求這n個字串的最長公共子串行 我的做法就是使用位運算遍歷。朱學長要打我.就是每一位就是乙個0 1,來遍歷,這樣就比for迴圈遍歷快很多,然後分別使用map來存同時要避免在每個字串中子串出現次數大於1,然後再用...