当前位置:   article > 正文

华为od 分批萨

分批萨

题目

“吃货"和“馋嘴”两人到技萨店点了一份铁盘(圆形)披萨,并嘱咐店员将技萨按放射状切成大小相同的偶数扇形小块。但是粗心服务员将技萨切成了每块大小都完全不同奇数块,且肉眼能分辨出大小,
由于两人都想吃到最多的披萨,他们商量了一个他们认为公平的分法:从“吃货"开始,轮流取披萨。除了第一块披萨可以任意选取以外,其他都必须从缺口开始选。
他俩选披萨的思路不同。“馋嘴"每次都会选最大块的披萨,而且“吃货”知道“馋嘴”的想法。
己知披萨小块的数量以及每块的大小,求“吃货"能分得的最大的披萨大小的总和。

输入描述:
第1行为一个正整数奇数N,表示披萨小块数量。3<=N<500.接下来的第2行到第N+1行(共N行),每行为一个正整数,表示第(块披萨的大小。1<=i<=N。披萨小块从某一块开始,按照一个方向依次顺序编号为1~N。每块披萨的大小范围为[1,21474836471]。

输出描述:
“吃货"能分得的最大的披萨大小的总和。

输入

5

8

2

10

5

7

输出

19

代码

  1. public class Main {
  2. public static void main(String[] args) {
  3. Scanner in = new Scanner(System.in);
  4. int number = in.nextInt();//披萨小块的数量
  5. List<Long> list = new ArrayList<>();
  6. for (int i = 0; i < number; i++) {
  7. list.add(in.nextLong());
  8. }
  9. Long Max= 0L;//最大披萨块
  10. for (Long aLong : list) {
  11. Max = Math.max(aLong, Max);
  12. }
  13. int indexMax=list.indexOf(Max);
  14. Long sum=Max;//吃货的披萨总量,最大的披萨块被他吃
  15. //披萨开口位置的下标
  16. int a=indexMax-1;
  17. int b=indexMax+1;
  18. int lun=1;//拿披萨的次数
  19. while(true){
  20. long ps=0;//每次拿的披萨大小
  21. if(a<0){
  22. a=list.size()-1;
  23. }
  24. if(b>list.size()-1){
  25. b=0;
  26. }
  27. if(a==b){//最后一次拿披萨
  28. sum=sum+list.get(a);
  29. break;
  30. }
  31. if(list.get(a)>list.get(b)){
  32. ps=list.get(a);
  33. a--;
  34. }else{
  35. ps=list.get(b);
  36. b++;
  37. }
  38. if(lun%2==0){//偶数次吃货拿披萨
  39. sum=sum+ps;
  40. }
  41. lun++;
  42. }
  43. System.out.println(sum);
  44. }
  45. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/1001903
推荐阅读
相关标签
  

闽ICP备14008679号