Nothing is Impossible(思维题)

                          Problem D. Nothing is Impossible

                Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
                                      Total Submission(s): 3446    Accepted Submission(s): 1132

Problem Description

m students, including Kazari, will take an exam tomorrow.
The paper consists of exactly n problems, the i-th problem contains ai correct answers and bi incorrect answers, i.e. the i-th problem contains ai+bi candidates in total.
Each student should choose exactly one candidate as answer for each problem. If the answer to a certain problem is correct, then the student will get one point. The student who gets the most points wins.
Students only know the structure of the paper, but they are able to talk with each other during the exam. They decide to choose a subset S of all n problems, and they will only be able to submit answers on these problems.
They want to know the maximum size of S that the winner among them will solve all the problems in S if they take the optimal strategy.

For sample 1, students can choose S={1},and we need at least 4 students to guarantee the winner solve the only problem.
For sample 2, students can choose S={1,2,3}, and we need at least 24 students to guarantee the winner solve these three problems, but if |S|=4, we need at least 96 students, which is more than 50.

Input

The first line of the input contains an integer T (1≤T≤100) denoting the number of test cases.
Each test case starts with two integers n,m (1≤n≤100,1≤m≤109), denoting the number of problems and the number of students. Each of next n lines contains two integers ai,bi (1≤bi≤100,ai=1), indicating the number of correct answers and the number of incorrect answers of the i-th problem.

Output

For each test case, print an integer denoting the maximum size of S.

 Sample Input

2

3 5

1 3

1 3

扫描二维码关注公众号,回复: 2699070 查看本文章

1 3

5 50

1 1

1 3

1 2

1 3

1 5

Sample Output

1 3

题意:命题组后来改了题意,但做法基本相同。有n道题,m个学生,这m个学生串联,力求使得他们中的最高分最高(关于考试内容他们什么也不会,全靠蒙)。问你他们造出来的最高分至少能得多少分。

把答案数从小到大排列,每道题将所有人均分(这样总有做对的),下一道题再将上一道所有选项内的人均分,一直到分到某个选项的人数不足一个为止。

#include<bits/stdc++.h>
using namespace std;

//int ques[105];

struct node
{
    int s,a,b;
}ques[105];

int dp[105];

bool cmp(node a,node b)
{
    if(a.s!=b.s)
       return a.s<b.s;
    else
        return a.b<b.b;
}

int main()
{
    int num;
    scanf("%d",&num);
    while(num--)
    {
        int n,m,x,y,t;
        scanf("%d%d",&n,&m);
        t=m;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&x,&y);
            ques[i].s=x+y;
            ques[i].a=x;
            ques[i].b=y;
        }
        sort(ques,ques+n,cmp);
        memset(dp,0,sizeof(dp));
        int i=0;

        while(m/ques[i].s>0&&i<n)
        {
        //     if(m%ques[i].s>ques[i].b)
        //        m+=ques[i].s;
            m/=ques[i++].s;
        }
        printf("%d\n",i);
    }
    return 0;                                                                                                                                                                                                                                                                                                                         


}

猜你喜欢

转载自blog.csdn.net/sadsummerholiday/article/details/81367093