题意:有n个学生,k种饮料,每个学生需要一种饮料,有n/2向上取整组饮料,每组饮料有两个同种饮料,求得到满足的学生的最多个数
思路:每次取偶数个肯定是最优的,输入的时候判断当前品种饮料是否需求为偶数,是则减去一组,满足学生加2,并将标志设为0,若还有剩余没选,则从当前剩余的单数个中选完剩余饮料,每选一次满足学生加1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1005;
int n, k, a[maxn], vis[maxn];
int main()
{
while (cin >> n >> k) {
int t = (n+1) / 2, res = 0;
memset(vis, 0, sizeof(vis));
for (int i = 0; i < n; i++) {
cin >> a[i];
if (vis[a[i]] && t >= 1) {
res += 2;
vis[a[i]] = 0;
t--;
}
else
vis[a[i]] = 1;
}
for (int i = 0; i <= k; i++)
if (vis[i] && t >= 1) {
res++;
t--;
}
cout << res << endl;
}
}