题目描述
现在有一条笔直的水槽,里面有N块挡板。你需要从中选取两块挡板,使得能够获取最多的水容量。
输入
测试数据由多组输入样例组成
第一行输入一个整数N,( 2 <= N <= 20000 )
第二行输入N个整数 ni ( 0 <= ni <= 10000),分别代表挡板的高度
输出
输出能够获取的最多水容量
样例输入 Copy
9
1 8 6 2 5 4 8 3 7
样例输出 Copy
49
解题思路
每次用左边的挡板和右边的挡板比较,那根挡板段就用那根挡板的高度*他们的距离,如果左边的挡板段l+1,如果右边的挡板短r-1;知道l>=r为止。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,a[20005],j,t,max1,l,r,s;
while(~scanf("%d",&n)){
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
l=1;
r=n;
max1=0;
while(l<r){
t=min(a[l],a[r]);
s=(r-l)*t;
max1=max(s,max1);
if(a[l]<=a[r]) l++;
else r--;
}
printf("%d\n",max1);
}
return 0;
}