您的位置:首页 > 其它

Clarke and food(HDU5562)

2016-01-27 14:27 218 查看

Clarke and food

[align=left]Problem Description[/align]
Clarke is a patient with multiple personality disorder. One day, Clarke turned into a cook, was shopping for food.

Clarke has bought n
food. The volume of the ith
food is vi.
Now Clarke has a pack with volume V.
He wants to carry food as much as possible. Tell him the maxmium number he can brought with this pack.
 

[align=left]Input[/align]
The first line contains an integer
T(1≤T≤10),
the number of the test cases.

For each test case:

The first line contains two integers n,V(1≤n≤105,1≤V≤109).

The second line contains n
integers, the ith
integer denotes vi(1≤vi≤109).
 

[align=left]Output[/align]
For each test case, print a line with an integer which denotes the answer.
 

[align=left]Sample Input[/align]

1
3 5
1 3 4

 

[align=left]Sample Output[/align]

2

Hint:
We can carry 1 and 3, the total volume of them is 5.

题意:给定物品的数量以及每个物品的体积,尽可能往一定体积的包里装,求能装下物品的最多个数,看似是DP问题,但仔细再看发现求的是物品最大个数,而不是能装的最大体积,所以只需贪心即可哦哦哦哦哦!!!!!!!

代码:

#include<stdio.h>

#include<string.h>

#include<algorithm>

#include<math.h>

using namespace std;

int main()

{

    int t;

    scanf("%d",&t);

    while(t--)

    {

        int n,v;

        int a[200000];   //看题n的范围,所以要比那个大,我之前开了1000,结果错了,正是因为没看清题,这是小细节噢噢噢噢。。

        scanf("%d%d",&n,&v);

        for(int i=0;i<n;i++)

        {

            scanf("%d",&a[i]);

        }

        sort(a,a+n);  //排序,这是贪心题的必备

        int sum=0,b=0;   //sum用来记物品总体积,b用来记物品的个数

        for(int i=0;i<n;i++)

        {  

            if(sum+a[i]>v)   //直到所装物品体积大于背包体积,跳出整个循环,下边自然也无需继续

            {

               break;

            }

            sum=sum+a[i];

            b++;   //符合条件加1

        }

        printf("%d\n",b);

    }

}

[align=center]
[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Clarke and food HDU5562