码迷,mamicode.com
首页 > 编程语言 > 详细

杭电1506 java

时间:2019-03-09 17:49:31      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:stat   dff   imp   str   can   面积   int   最大   exti   

求最大子矩阵面积(dp)

 

import java.util.*;
public class Main1{
  
    public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
 
          int n = sc.nextInt();
          int a[]= new int [2*n+1];
 
          for(int i=1;i<=n;i++){
              a[i]=sc.nextInt();
          }
         int l[]=new int[10010];
         int r[]=new int[10010];
         l[1]=1; r[n]=n;
         for(int i=2;i<=n;i++){
            int  t = i;              //记录a[i]往左比他小的最小边界
             while(t>1&&a[i]<=a[t-1])
                t= l[t-1];              //这步相当巧妙,直接实现了跳转,如果a[t-1]不小于a[i]的话,我们可以断定a[t-1]的最左边肯定包含a[i]的最左边.直接跳过中间的点
l[i]=t; } for(int i=n-1;i>=1;i--){ int t = i; while(t<n&&a[i]<=a[t+1]) t= r[t+1]; r[i]=t; } int ans=0; // System.out.println("fd"); for(int i=1;i<=n;i++){ // System.out.println("dff"); ans=Math.max(ans,(r[i]-l[i]+1)*a[i]); } System.out.println(ans); } } // }

 

杭电1506 java

标签:stat   dff   imp   str   can   面积   int   最大   exti   

原文地址:https://www.cnblogs.com/ls-pankong/p/10502141.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!