najimCseJu

1937

Jan 13th, 2023
714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.23 KB | None | 0 0
  1. class Solution {
  2.     long findMax(long[] dp){
  3.         long ans = dp[0];
  4.         for(int i=1;i<dp.length;i++){
  5.             ans = Math.max(ans,dp[i]);
  6.         }
  7.         return ans;
  8.     }
  9.     public long maxPoints(int[][] points) {
  10.         long[] leftMax = new long[points[0].length+1];
  11.         long[] rightMax = new long[points[0].length+1];
  12.         long[] dp = new long[points[0].length];
  13.         long ans = 0;
  14.         for(int i=0;i<points.length;i++){
  15.             if(i==0){
  16.                 for(int j=0;j<points[0].length;j++){
  17.                     dp[j]=(long)points[0][j];
  18.                 }
  19.                 ans = findMax(dp);
  20.             }else{
  21.                 for(int j=0;j<points[0].length;j++){
  22.                     dp[j] = points[i][j] + Math.max(leftMax[j],rightMax[j]);
  23.                 }
  24.             }
  25.             ans = findMax(dp);
  26.             leftMax[0] = dp[0];
  27.             for(int j=1;j<points[0].length;j++){
  28.                 leftMax[j] = Math.max(leftMax[j-1]-1,dp[j]);
  29.             }
  30.             rightMax[points[0].length-1]=dp[points[0].length-1];
  31.             for(int j=points[0].length-2;j>=0;j--){
  32.                 rightMax[j] = Math.max(dp[j],rightMax[j+1]-1);
  33.             }
  34.         }
  35.         return ans;
  36.     }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment