4838 水桶接水经验值:0
题目描述 Description
给定n个整数a1,a2,…,an,表示有n个木板,ai表示第i个木板的长度。在坐标内画n条与x轴垂直的线,相邻两条线的距离为1,第i条线的长度为ai。我们需要在这n个木板中,选出其中的两个木板,使得它们与x轴共同构成的一个接水的容器,要知道一个容器能够接多少水,取决于最短的那个木板的长度,这个容器的接水量就是这两个木板中较短的那个木板的长度乘上两个木板之间的距离。我们要找出可以容纳最多的水的容器的容量。
输入描述 Input Description
输入两行
第一行一个整数n,表示n个木板(2<=n<=100)
第二行n个整数,表示n个木板具体的长度
输出描述 Output Description
输出一个数,表示构成容器的最大容量
样例输入 Sample Input
5 4 5 3 6 8
样例输出 Sample Output
16
int a[110],maxn;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(abs(i-j)*min(a[i],a[j])>maxn){
maxn=abs(i-j)*min(a[i],a[j]);
}
}
}
cout<<maxn;
只有核心
李鑫羽在2020-08-24 21:29:31追加了内容
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(abs(i-j)*min(a[i],a[j])>maxx){
maxx=abs(i-j)*min(a[i],a[j]);
}
}
}
cout<<maxx;
这一题简单的把老师给的思路翻译成代码就彳亍了吧
枚举第一块木板i
枚举第二块木板j
取a[i],a[j]两者长度较小的作为高,i与之间的距离作为底
接水的量等于底乘高,取最大值
思路↑
for(int i=1; i<=n; i++){
for(int j=i+1; j<=n; j++){
int jsl=(min(a[i],a[j])*(abs(i-j)));
ans=max(ans, jsl);
}
}
核心↑
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
int r=min(a[i],a[j])*(max(i,j)-min(i,j));
if(r>mx) mx=r;
}
}
