滴滴笔试,第二题求助,哪位同学帮我分析分析,谢谢。

题目:有n张桌子,m批人,每张桌子的最大人数为h,每批人的人数为i,消费为j
每天桌子坐的人数不能大于h,求怎么样消费最高。
大义是这样。做过的小伙伴应该记得吧,然而我做出来尽然出现  数组溢出和野指针异常  希望大神帮帮忙。帮我分析分析。

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        @SuppressWarnings("resource")
        Scanner cin = new Scanner(System.in);
        while(cin.hasNext()){
            int n = cin.nextInt();
            int m = cin.nextInt();
            int zhuozi[] = new int[n];
            for(int i=0;i<n;i++){
                zhuozi[i] = cin.nextInt();
            }
            int ren[][] = new int[m][2];
            for(int i=0;i<m;i++){
                ren[i][0] = cin.nextInt();
                ren[i][1] = cin.nextInt();
            }
            Arrays.sort(zhuozi);   //排序
            int bucket[] = new int[m];
            int sum = 0;
            for(int i=0;i<zhuozi.length;i++){
                int cur = zhuozi[i];
                int max = -1;
                for(int j=0;j<m;j++){
                    if(ren[j][0]<=cur&&bucket[j]==0){
                        if(max<ren[j][1]){
                            max = j;
                        }
                    }
                }
                sum +=ren[max][1];   //找到出钱最多的批次
                bucket[max] = 1;//标记
            }
            System.out.println(sum);
        }
        
        
    }
 
    
   
}#Java工程师#
全部评论
运行一次以后没有出现异常,不知道为啥,但是好像有的结果不正确,你的max记录的好像是下标,但是if(max<ren[j][1])这个判断条件不对吧,例如输入 1  2 2 1 10  1 8
点赞
送花
回复 分享
发布于 2016-09-07 19:06

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务