對局匹配 藍橋真題(dp)

2021-09-21 02:25:06 字數 1098 閱讀 5818

問題描述

輸入格式

第一行包含兩個個整數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位,這樣就從第...