问题:分配

hjzp0vay  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(198)

我开始通过googlekickstart测试我的技能,然后选择一个过去的问题来看看它是如何工作的,然后我就陷入了困境。我的程序对这个示例运行得很好,但它给出了测试集1的运行时错误。我不明白它如何适用于样本,也不适用于测试集。我看不出我犯了什么错误。
问题链接:https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3f56
问题:
问题
有n栋房子待售。买第i栋房子花了ai美元。你的预算是b美元。
你最多能买多少套房子?
输入
输入的第一行给出了测试用例的数量t。t测试用例紧随其后。每个测试用例从一行开始,其中包含两个整数n和b。第二行包含n个整数。第i个整数是ai,第i个房子的成本。
输出
对于每个测试用例,输出一行包含case#x:y,其中x是测试用例编号(从1开始),y是您可以购买的最大房屋数量。
限制
时间限制:每个测试集15秒。内存限制:1gb。1≤ t型≤ 1001≤ b≤ 1051≤ 人工智能≤ 1000,对我来说。
测试集1≤ n≤ 100
测试集2 1≤ n≤ 105
样品
输入
3 4 100 20 90 40 90 4 50 30 30 10 10 3 300 999 999 999
输出
案例#1:2案例#2:3案例#3:0
在示例案例1中,您的预算为100美元。你可以花20+40=60美元买第一套和第三套房子。
在示例案例2中,您的预算为50美元。你可以花30+10+10=50美元买第一、第三和第四套房子。
在示例案例3中,您的预算为300美元。你不能买任何房子(所以答案是0)。
我的代码:

import java.util.*;

public class Solution {

public static void main(String[] args) {

    ArrayList<Integer> list = new ArrayList<>();

    int N,T,B = 0,A;

    Scanner input = new Scanner(System.in);

    int casex = 1;

    T = input.nextInt();

    for (int i = 0; i < T; i++) {

        N = input.nextInt();
        list.add(N);

        B = input.nextInt();
        list.add(B);

        for (; N > 0; N--) {
            A = input.nextInt();
            list.add(A);
        }
    }

    for(int i = 0; i < list.size();) {

        int j = list.get(i);
        int jtemp = j;
        int k = list.get(i+1);
        ArrayList<Integer> house = new ArrayList<>();

        for (; j > 0; j--) {
            house.add(list.get(i+j+1));
        }

        int count = 0;

        do {
            int min = Collections.min(house);

            if (k - min >= 0) {
                count += 1;
                k -= min;
                house.remove(new Integer(min));
            }

            else {
                break;
            }
        } while (B > 0);

        System.out.println("Case #" + casex + ": " + count);
        casex += 1;

        i += jtemp + 2;
    }
}

}
以下是我的示例运行:
样品运行

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题