广告牌移除Java解决方案不起作用
有两个线程描述此问题: 为了方便起见,我再次在此重申上发现的问题:广告牌移除Java解决方案不起作用,java,algorithm,Java,Algorithm,有两个线程描述此问题: 为了方便起见,我再次在此重申上发现的问题: ADZEN是你们城市非常受欢迎的广告公司。在每一条路上你都能看到他们的广告牌。最近,他们面临着一个严峻的挑战,MG路——你们城市中使用最多、最美丽的道路——几乎被广告牌填满,这对自然景观产生了负面影响 在人们的要求下,ADZEN决定移除一些广告牌,这样在道路的任何部分都不会有超过K个的广告牌 你可以假设MG路是一条有N个广告牌的直线。最初,相邻的两个广告牌之间没有间隙 ADZEN的主要收入来自这些广告牌,因此广告牌移除过程
ADZEN是你们城市非常受欢迎的广告公司。在每一条路上你都能看到他们的广告牌。最近,他们面临着一个严峻的挑战,MG路——你们城市中使用最多、最美丽的道路——几乎被广告牌填满,这对自然景观产生了负面影响 在人们的要求下,ADZEN决定移除一些广告牌,这样在道路的任何部分都不会有超过K个的广告牌 你可以假设MG路是一条有N个广告牌的直线。最初,相邻的两个广告牌之间没有间隙 ADZEN的主要收入来自这些广告牌,因此广告牌移除过程必须以这样的方式进行,即在所有可能的最终配置中,剩余的广告牌应提供最大可能的利润。配置的总利润是该配置中所有广告牌的利润值之和 给定N,K和N个广告牌中每个广告牌的利润值,输出在给定条件下剩余广告牌可获得的最大利润
我对这个问题的解决方案是基于这样一个观察:给定K,你可以有K+1种不同的方式来移除广告牌,而
KI不明白你是如何做到这一点的:“给定K,你可以有K+1种不同的方式来移除广告牌。”例如,对于N=10,K=2
,你有超过K+1
的选项(假设1
是一个广告牌):1101101101
,1011011011
,1011010110
,0110110
,0101010101
仅作为初学者。根据各个广告牌的价格,它们中的任何一个都可能有效。是的,你绝对正确,我一直坚持这种模式的想法,每次删除指定项时都会从左向右移动基于合同的ic广告牌。这就是为什么我被固定在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);
}