問題描述
小明發現**的自動對局系統在匹配對手時,只會將積分差恰好是 k 的兩名使用者匹配在一起。
如果兩人分差小於或大於 k,系統都不會將他們匹配。
現在小明知道這個**總共有 n 名使用者,以及他們的積分分別是 a1, a2, … an。
輸入格式
第一行包含兩個個整數 n 和 k。
第二行包含n個整數 a1, a2, … an。
輸出格式
乙個整數,代表答案。
樣例輸入1
10 0
1 4 2 8 5 7 1 4 2 8
樣例輸出16
樣例輸入2
10 1
2 1 1 1 1 4 4 3 4 4
樣例輸出28
資料範圍
對於 30% 的資料,1 ≤ n ≤ 10
對於 100% 的資料,1 ≤ n ≤ 105, 0 ≤ ai ≤ 105, 0 ≤ k ≤ 105
題解一
dfs(會超時):藍橋杯官網只過了乙個資料,其它的都超時了?
#include
using
namespace std;
int n, k, ans;
bool st[
100010];
int s[
100010
], a[
100010];
bool
judge
(int u,
int i)
void
dfs(
int u)
return;}
intmain()
ps:然而在dotcpp上能通過全部的資料?
題解二
動態規劃:
以第二個資料2 1 1 1 1 4 4 3 4 4
為例,由於 k = 1,所以分成 1 組公差為 1 等差數列。
決策
:由於相鄰兩項公差為 k,所以不能選擇相鄰的兩項。
狀態轉移方程:
#include
using
namespace std;
const
int n =
100010
;int n, k, x, ans;
int cnt[n]
, s[n]
, f[n]
;int
main()
if(k ==0)
// k = 0 需要特判
else
ans +
= f[u -1]
;// 加上每組等差數列選擇的最大值}}
cout << ans << endl;
return0;
}
2017第八屆藍橋杯決賽 對局匹配
小明發現 的自動對局系統在匹配對手時,只會將積分差恰好是k的兩名使用者匹配在一起。如果兩人分差小於或大於k,系統都不會將他們匹配。現在小明知道這個 總共有n名使用者,以及他們的積分分別是a1,a2,an。第一行包含兩個個整數n和k。第二行包含n個整數a1,a2,an。對於30 的資料,1 n 10 ...
第八屆藍橋盃國賽 磁磚樣式
題目 小明家的一面裝飾牆原來是 3 10 的小方格。現在手頭有一批剛好能蓋住2個小方格的長方形瓷磚。瓷磚只有兩種顏色 黃色和橙色。小明想知道,對於這麼簡陋的原料,可以貼出多少種不同的花樣來。小明有個小小的強迫症 忍受不了任何2 2的小格仔是同一種顏色。瓷磚不能切割,不能重疊,也不能只鋪一部分。另外,...
藍橋杯第八屆省賽
第4題 6x6的方格,沿著格仔的邊線剪開成兩部分。要求這兩部分的形狀完全相同。如圖 p1.png,p2.png,p3.png 就是可行的分割法。試計算 包括這3種分法在內,一共有多少種不同的分割方法。注意 旋轉對稱的屬於同一種分割法。請提交該整數,不要填寫任何多餘的內容或說明文字。圖的dfs 按照兩...