zoukankan      html  css  js  c++  java
  • 阿里测评——靶子

    问答题:

    在某射击场有N个靶,每个靶上都有一个分数,存在score数组中。击中第i个靶的得分为score[left] * score[i] * score[right],同时原left和right两个靶变为相邻的靶。其中得分为0的靶是不能射击的,当left不存在或者不能射击时,得分为 score[i] * score[right],同理right也遵循此规则; 当left和right都不存在或者不能射击时,得分为score[i]。请计算出击中所有能射击的靶,最多能得多少分?设计算法。

    可参考:leetCode312.Burst Balloons

    AC通过,不足之处请指正

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 import java.util.Scanner;
     4 
     5 public class Main{
     6 
     7     public static void main(String[] args) {
     8         Scanner sc=new Scanner(System.in);
     9         List<Integer>list=new ArrayList<Integer>();
    10         List<Integer>tmplist=new ArrayList<Integer>();
    11         int sum=0;
    12         int n=sc.nextInt();
    13         for(int i=0;i<n;i++)
    14             list.add(sc.nextInt());
    15         for(int i=0;i<n;i++){
    16             if(list.get(i)!=0)
    17                 tmplist.add(list.get(i));
    18             else{
    19                 int []a=new int[tmplist.size()];
    20                 for(int j=0;j<tmplist.size();j++){
    21                     a[j]=tmplist.get(j);
    22                 }
    23                 sum+=maxCoins(a);
    24                 tmplist.clear();
    25             }
    26             if(i==n-1){
    27                 int []a=new int[tmplist.size()];
    28                 for(int j=0;j<tmplist.size();j++){
    29                     a[j]=tmplist.get(j);
    30                 }
    31                 sum+=maxCoins(a);
    32                 tmplist.clear();
    33             }
    34         }
    35         System.out.println(sum);
    36     }
    37     public static int maxCoins(int[] iNums) {
    38         int[] nums = new int[iNums.length + 2];
    39         int n = 1;
    40         for (int x : iNums) if (x > 0) nums[n++] = x;
    41         nums[0] = nums[n++] = 1;
    42         int[][] memo = new int[n][n];
    43         return burst(memo, nums, 0, n - 1);
    44     }
    45 
    46     public static int burst(int[][] memo, int[] nums, int left, int right) {
    47         if (left + 1 == right) return 0;
    48         if (memo[left][right] > 0) return memo[left][right];
    49         int ans = 0;
    50         for (int i = left + 1; i < right; ++i)
    51             ans = Math.max(ans, nums[left] * nums[i] * nums[right] 
    52             + burst(memo, nums, left, i) + burst(memo, nums, i, right));
    53         memo[left][right] = ans;
    54         return ans;
    55     }
    56 
    57 }
  • 相关阅读:
    PHP安装linux
    nginx 安装
    Redis安装
    linux启动http服务
    收藏的有用的网页
    laravel框架部署后有用命令
    .net 报错access to the path c: empimagefilesmsc_cntr_0.txt is denied
    oracle 触发器
    学习Auxre记录
    mysql数据库索引
  • 原文地址:https://www.cnblogs.com/MazeHong/p/7397061.html
Copyright © 2011-2022 走看看