hdu_2124 Flying to the Mars & hdu_1800 Repair the Wall 贪心水题

hdu_1800

简单排一下序,从大开始把比他小的都访问一遍,ans++;

#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

struct dat
{
    int level;
    int visit;
}data[3200];

bool cmp(dat a, dat b)
{
    return a.level > b.level;

}

int main()
{
    int n;

    while(scanf("%d", &n)!=-1)
    {
        for(int i=0; i<n; i++)
        {
            scanf("%d", &data[i].level);
            data[i].visit=0;
        }

        sort(data, data+n, cmp);


        int ans=0;
        for(int i=0; i<n; i++)
        {
            if(!data[i].visit)
            {
                data[i].visit=1;
                int temp=i;
                ans++;
                for(int j=0; j<n; j++)
                {
                    if(!data[j].visit && data[temp].level>data[j].level)
                    {
                        data[j].visit=1;
                        temp=j;

                    }
                }
            }
        }
        printf("%d\n", ans);
    }

    return 0;
}

hdu_2124

排个序,用 l 从大开始减去block的大小,记录用的block块数, 最后 l > 0 , 则输出impossible,否则输出块数。

#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

bool cmp(int a, int b)
{
    return a>b;
}

int main()
{
    int l, n, block[1000];
    while(scanf("%d%d", &l, &n)!=-1)
    {
        for(int i=0; i<n; i++)
        {
            scanf("%d", &block[i]);
        }
        sort(block, block+n, cmp);

        int ans=0;
        for(int i=0; i<n && l!=0; i++)
        {
            if(l>=block[i])
            {
                l-=block[i];
                ans++;
            }
            else
            {
                l=0;
                ans++;
                break;
            }
        }
        if(l!=0)
            printf("impossible\n");
        else
            printf("%d\n", ans);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Dawn-bin/p/10801743.html