思路:贪一下,优先用大数打小数,也就是:
这种做法也算不上 dp,只能算递推。
贴上AC Code,方便管理看:
#include <bits/stdc++.h>
#define pii pair<int,int>
#define x first
#define y second
using namespace std;
int n;
int a[100005];
map<int,int> f; // 遍历的时候更便利
int dp[100005];
int main()
{
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
f[a[i]]++;
}
int j = 1;
for(pii i : f)
{
if(i.y > dp[j-1]) dp[j] = i.y;
else dp[j] = dp[j-1];
// 方便理解,没有写成 dp[j] = max(i.y,dp[j-1])
j++;
}
cout << dp[j - 1];
return 0;
}
与众不同的实现:map
目前,题解区尚未有相同实现或讲的更详细的。