L 仓鼠养殖计划(贪心)

链接:https://ac.nowcoder.com/acm/contest/96/L
来源:牛客网

题目描述
集训队暑训的时候,是睡在机房的,有几个小伙子不甘寂寞,带了仓鼠来机房。有的还不止带了一只!
为此,贴心的集训队刘队长买了一大一小两种放仓鼠笼子的架子,大的可以放两个仓鼠笼 小的只能放一个。
要注意的是仓鼠是领地动物,一般来讲 仓鼠笼与仓鼠笼之间是不能贴在一起的,
但同一个人带来的仓鼠的仓鼠笼可以被放在一起(既两个仓鼠笼如果属于同一个人,那么这两个仓鼠笼就可以被放在同一个大架子上)
现在告诉你现有的两种架子的数量和多少人带了仓鼠以及每个人带的仓鼠的数量,问你是否能将这些仓鼠放下。
输入描述:
第一行为一个数T 表示测试样例组数

对于每组测试数据

第1行输入a,b,n; 分别为小架子的数量,大架子的数量,带了仓鼠的人数

第2行有n个数字P1-Pn,分别表示每个人带的仓鼠的数量
输出描述:
如果放得下 则输出"Yes" 否则输出"No"
示例1
输入
复制
1
1 2 4
1 1 1 1
输出
复制
No
备注:
1<=n<=50 1<=a,b<=100 1<=Pi<=20

思路:贪心,唯一需要特殊考虑的是一个人的仓鼠大于等于2的情况,那么只要遇到这种人的时候将其仓鼠放入大笼子内即可。

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a,b,n;
    int num[200];
    int T;
    cin>>T;
    while(T--)
    {
    	cin>>a>>b>>n;
        for(int i = 1; i <= n; i++)
        {
            cin>>num[i];
            while(num[i] >= 2 && b >= 1)
            {
                num[i] -= 2;
                b--;
            }
        }
        int sum = 0;
        for(int i = 1; i <= n; i++)
        {
            sum += num[i];
        }
        if(sum <= a + b)
        {
            printf("Yes\n");
        }
        else
            printf("No\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/tomjobs/article/details/89154958
l