标签:dmi 要求 一个 左右 min 区间 i++ find ret
未完。。。
//要求最大矩形,需要最大的长度和高度。
//划分区间的方法,当某高度低于左右两侧高度时,则以他为基准,分别算左右面积。
//设置一个变量记录全局最大面积。
//当长度为1时,计算完当前面积,并与最大面积比较后结束。
1 #include<cstdio> 2 int MS=0; 3 int height[1000+5]; 4 int findMin(int s,int e){ 5 int m=s; 6 for(int i=s+1;i<e;i++){ 7 if(height[i]<height[m]) 8 m=i; 9 } 10 return m; 11 } 12 void part(int s,int e,int low){ 13 int mid,tmp; 14 if(s==e){ 15 if(MS<height[s]) 16 MS=height[s]; 17 return ; 18 }else{ 19 tmp=(e-s+1)*height[low]; 20 if(MS<tmp) 21 MS=tmp; 22 if(s==low){ 23 mid=findMin(s+1,e); 24 part(s+1,mid,mid); 25 part(mid,e,mid); 26 }else if(e==low){ 27 mid=findMin(s,e); 28 part(s,mid,mid); 29 part(mid,e-1,mid); 30 } 31 } 32 } 33 int main(){ 34 int n,i,mid; 35 scanf("%d",&n); 36 for(i=0;i<n;i++){ 37 scanf("%d",height+i); 38 } 39 mid=findMin(0,n); 40 part(0,mid,mid); 41 part(mid,n-1,mid); 42 printf("%d",MS); 43 return 0; 44 }
标签:dmi 要求 一个 左右 min 区间 i++ find ret
原文地址:https://www.cnblogs.com/cuphead/p/11470205.html