Welcome To Ke_schola|

Ke_scholar

园龄:2年2个月粉丝:30关注:10

2023-12-02 14:42阅读: 7评论: 0推荐: 0

B. BerSU Ball

B. BerSU Ball

排序后考虑\(dp\),\(dp_{i,j}\)表示前\(i\)个男生和前\(j\)个女生能匹配的最大数.

\[\begin{aligned} if(|a_i - b_j| \le 1) \ dp_{i,j} = dp_{i-1,j-1} + 1 \\ else \ \ \ \ \ \ \ \ dp_{i,j}=\max(dp_{i-1,j},dp_{i,j-1}) \end{aligned} \]

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';
using namespace std;
using i64 = long long;
typedef pair<i64, i64> PII;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n ;
vector<int> a(n + 1);
for (int i = 1; i <= n; i ++ )
cin >> a[i];
cin >> m;
vector<int> b(m + 1);
for (int j = 1; j <= m; j ++)
cin >> b[j];
sort(a.begin() + 1, a.end());
sort(b.begin() + 1, b.end());
vector dp(n + 1, vector<int>(m + 1));
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= m; j ++) {
if (abs(a[i] - b[j]) <= 1)
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
cout << dp[n][m] << '\n';
return 0;
}

本文作者:Ke_scholar

本文链接:https://www.cnblogs.com/Kescholar/p/17871592.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Ke_scholar  阅读(7)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起