問題描述
輸入格式
第一行包含兩個個整數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
樣例輸出
思路
先將每個分數的人數統計下來,然後,分組。一共分為k組,在每一組內,相鄰的兩個人之間,分數相差k,然後在每一組內,選出可以挑出的最大人數,將最大人數加到最終的結果當中。在挑選最大人數時,要用到dp。主要就是找轉移方程,dp[ j ]表示從第0個人開始,到第 j 個人,可以選出的最大人數。如果選第 j 個人的話,dp[ j ]=dp[j-2]+val[ j ],如果不選第 j 個人的話,dp[ j ]=dp[ j-1 ]。所以dp[ j ]=max( dp[j-2]+val[ j ], dp[j-1])。
**
#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int n=1e5+5;
int n,k,score,num[n];
int val[n],dp[n];
int slove(int k)
} else
dp[0]=val[0];
for(int j=1;jsum+=dp[cnt-1];//將每個挑出的最大人數加到最終結果中
} }return sum;
}int main()
cout
}
對局匹配(藍橋杯)
小明發現 的自動對局系統在匹配對手時,只會將積分差恰好是k的兩名使用者匹配在一起。如果兩人分差小於或大於k,系統都不會將他們匹配。現在小明知道這個 總共有n名使用者,以及他們的積分分別是a1,a2,an。第一行包含兩個個整數n和k。第二行包含n個整數a1,a2,an。對於30 的資料,1 n 10 ...
藍橋杯 2023年第八屆真題 對局匹配
我們可以按照要求將分數分成不同組,同組內的資料相鄰元素差值為k。例如樣例2 10 1 2 1 1 1 1 4 4 3 4 4我們可以分出一組 1,2,3,4 這樣的目的是為了便於選取,因為相鄰元素差值為k,所以我們就可以進行跳躍式選取,也就是如果當前決定第i位的值,我們可以選擇選取第i位,這樣就從第...
藍橋杯 2023年第八屆真題 對局匹配
我們可以按照要求將分數分成不同組,同組內的資料相鄰元素差值為k。例如樣例2 10 1 2 1 1 1 1 4 4 3 4 4我們可以分出一組 1,2,3,4 這樣的目的是為了便於選取,因為相鄰元素差值為k,所以我們就可以進行跳躍式選取,也就是如果當前決定第i位的值,我們可以選擇選取第i位,這樣就從第...