P11231 [CSP-S 2024] 决斗
简述题意
每个怪兽有一个实力 ,每个怪兽只可以欺负实力严格小于自己的怪兽,被成功欺负的怪兽出局。当未退出游戏的怪兽都已发起过攻击时,游戏结束。规定一种方案使得未退出游戏的怪兽数量尽可能少。
算法分析
显然,对于 , 在 面前是等价的(都能被欺负)。
定义 表示 的怪兽个数, 为对于实力为 的怪兽的最优解。
所以按实力从小到大欺负,有两种情况:
- 如当前 ,欺负 只即可。即 。
- 否则,欺负当前所有怪兽,即 。
上面的过程可看做 。
然后这题就做完了。
诶等等,如果这个数据:
3
1 2 2
有一只怪兽好像没有欺负别人啊?
其实让剩下相同的再互相欺负一遍即可。
时间复杂度 , 为 的值域。
代码实现
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[100005];
signed main()
{
int n,x,ans=0;
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
a[x]++;
}
for(int i=1;i<=100000;i++) ans=max(ans,a[i]);
cout<<ans;
return 0;
}

浙公网安备 33010602011771号