2860. 让所有学生保持开心的分组方法数

解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 int DpTopic::countWays(vector<int>& nums)
{
//排序,枚举
// 将原有的内容降序排列
ranges::sort(nums, greater<int>());

int n = nums.size() - 1; //默认选择所有的元素
int res = 1;

for (int i = 1; i < nums.size(); ++i)
{
if (nums[i] < n && nums[i - 1] > n)
{
++res;
}
--n;
}

//最小的元素不是0的情况下,才能所有元素全都不选取还符合条件
if (nums.back() != 0)
{
++res;
}

return res;
}