Billboard删除Java解决方案无法正常工作

时间:2013-10-11 15:29:45

标签: java algorithm

有两个线程描述了这个问题:

  1. Removal of billboards from given ones
  2. Algorithm to find maximum sum of elements in an array such that not more than k elements are adjacent
  3. 我重申Hacker Rank上的问题,为方便起见,再次在这里:


    ADZEN是您所在城市非常受欢迎的广告公司。在每条路上你都可以看到他们的广告牌。最近他们面临着严峻的挑战,MG Road是您所在城市中最常用,最美丽的道路,几乎被广告牌所填满,这对自然景观产生负面影响。

    根据人们的要求,ADZEN已经决定拆除一些广告牌,以便在道路的任何一个区域内不超过K个广告牌。

    你可以假设MG Road是一条带有N个广告牌的直线。最初两个adjecent广告牌之间没有差距。

    ADZEN的主要收入来自这些广告牌,因此广告牌移除过程必须以这样的方式完成:剩余的广告牌应该在所有可能的最终配置中提供最大可能的利润。配置的总利润是总和该配置中存在的所有广告牌的利润值。

    给定N,K和N个广告牌中每个广告牌的利润值,输出在给定条件下可从剩余广告牌获得的最大利润。


    我对此问题的解决方案基于以下观察结果:给定K时,您可以使用K + 1种不同的方法在K<N时移除广告牌,如果K == N则只有1.因此,在这种情况下, K<N我创建了K + 1个桶,其中每个桶对应一个解决方案。每个存储桶将保留广告牌收入,这些收入不会包含在相应的解决方案中。因此,最佳解决方案是具有最小收入总和的解决方案。我的代码如下:

    public class Billboards {
    
    
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] nums = in.readLine().split("\\s+");
        int n = Integer.parseInt(nums[0]);
        int k = Integer.parseInt(nums[1]);
        HashMap<Integer,Long> map = new HashMap<Integer, Long>();
    
        long number;
        int index;
        int bucketsNumber = k+1;
        long sum = 0;
        for(int i=0; i<n; i++){
            number = Long.parseLong(in.readLine());
            sum+=number;
            index = i%bucketsNumber;
            if (map.containsKey(index)){
                map.put(index, map.get(index) + number);
            } else {
                map.put(index, number);
            }
        }
         long min = Long.MAX_VALUE;
         for (int key : map.keySet()){
             if (map.get(key)<min){
                 min = map.get(key);
             }
         }
         if(k==n)
             System.out.println(sum);
         else
             System.out.println(sum-min);
    
    }
    

    }

    然而,这段代码并没有解决所有情况,但我似乎无法找出原因。我的解决方案的逻辑是否存在问题?

0 个答案:

没有答案