小明發現**的自動對局系統在匹配對手時,只會將積分差恰好是k的兩名使用者匹配在一起。如果兩人分差小於或大於k,系統都不會將他們匹配。
現在小明知道這個**總共有n名使用者,以及他們的積分分別是a1, a2, ... an。
第一行包含兩個個整數n和k。
第二行包含n個整數a1, a2, … an。
對於30%的資料,1 <= n <= 10
對於100%的資料,1 <= n <= 100000, 0 <= ai <= 100000, 0 <= k <= 100000
乙個整數,代表答案。
樣例輸入:
10 0
1 4 2 8 5 7 1 4 2 8
樣例輸出:
6樣例輸入:
10 1
2 1 1 1 1 4 4 3 4 4
樣例輸出:
8資源約定:
峰值記憶體消耗 < 256m
cpu消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。
所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。
注意: main函式需要返回0
注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。
注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。
提交時,注意選擇所期望的編譯器型別。
分析:可以先將所有的數劃分為k組,每組數內部相差k,沒有則為0,不同組選出來的數一定滿足兩兩之差均不為k,那麼現在就是要在每組內部選出盡可能多的數,可以用dp來做,型別01揹包的思想,每組每個數選或者不選,dp[j]表示前j個數滿足兩兩之差均不等於k的最大個數,容易推出狀態轉移方程為dp[j]=max(dp[j-1],dp[j-2]+val[j])。k為0的時候要特判一下。
**:
#include #include #include #include using namespace std;
const int n = 1e5+5;
int dp[n],ct[n],val[n],n,k,num;
int main()
if(k==0) else
}cout<}
return 0;
}
藍橋杯第八屆決賽
精神狀態不好的時候怎麼寫 真的哭了,一堆sb錯誤 對於16進製制,我們使用字母a f來表示10及以上的數字。如法炮製,一直用到字母z,就可以表示36進製。36進製中,a表示10,z表示35,aa表示370 你能算出 many 表示的數字用10進製表示是多少嗎?請提交乙個整數,不要填寫任何多餘的內容 ...
第八屆藍橋杯決賽總結
最後只得了個國三安慰獎,心裡遺憾也不遺憾。省賽結束後就一直沒認真刷過題,國三也是意料之中吧。比賽題目也是中規中矩,只是自己沒好好準備。第一題很簡單的簽到題。第二題其實之前做過很多態別題,dfs,然而由於自己太久沒做題,沒手感沒題感,寫了近乙個小時,還是沒能出結果。第三題 補全題,類似生成樹,前幾屆決...
藍橋杯 2023年第八屆真題 對局匹配
我們可以按照要求將分數分成不同組,同組內的資料相鄰元素差值為k。例如樣例2 10 1 2 1 1 1 1 4 4 3 4 4我們可以分出一組 1,2,3,4 這樣的目的是為了便於選取,因為相鄰元素差值為k,所以我們就可以進行跳躍式選取,也就是如果當前決定第i位的值,我們可以選擇選取第i位,這樣就從第...