问题标题: 酷町堂:4838 水桶接水

0
1
已解决
董宇昊
董宇昊
初级启示者
初级启示者

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


0
已采纳
李素妍
李素妍
新手天翼
新手天翼

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;

0
董宇昊
董宇昊
初级启示者
初级启示者

思路+核心代码

谢谢老铁

0
李鑫羽
李鑫羽
初级光能
初级光能

只有核心

李鑫羽在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;

0
0
陈振轩
陈振轩
高级光能
高级光能

这一题简单的把老师给的思路翻译成代码就彳亍了吧

枚举第一块木板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);
        }
    }

核心↑

0
胡焕宇
胡焕宇
初级守护
初级守护
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;
    }
} 

 

0
0
我要回答