问题标题: 酷町堂:1354 最大的矩形(rec)我裂开来

0
0
胡家翊
胡家翊
高级守护
高级守护

最大的矩形(rec)经验值:1200

不许抄袭,一旦发现,直接清空经验!

题目描述 Description

经过精心的计算,卡卡西终于帮助白胡子和黑胡子两位巫师分出了胜负,他们也遵守承诺打开了锁链。最终,卡卡西在四又四分之三号站台登上“和谐号”魔法快车,来到了世界魔法大学的门口。但此时她却惊讶地发现魔法大学被石头紧紧的裹住,转了一圈也没有发现大门,这是怎么回事呢?
原来,大学门口有一个很大的广场,而广场的顶部有着大小不一的长方形透光栅格,这些格子沿着屋顶的一侧整齐的排列着,它们的底部宽度一样,但是高度随着阳光照射的角度不同而时刻变化着,并在地上投影出变化着的影子,而这些影子所组成的直方图里面的最大矩形就是变化着的学校的大门-阴影之门,你能帮助卡卡西找出阴影之门的变化规律,准确说出阴影大门的面积,从而进入魔法学校么?
在横轴上放了n个相邻的矩形,每个矩形的宽度是w(所有矩形宽度一致),而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n 个矩形构成了一个直方图。
例如,下图中六个矩形的高度就分别是4, 2, 6, 5, 1, 7。宽度w=2。
image.png

输入描述 Input Description

输入数据共两行,第一行包含两个正整数n 和w(空格隔开),分别表示矩形的数量和矩形的宽度。第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔,hi 是第i 个矩形的高度。

输出描述 Output Description

一个正整数,表示给定直方图内的最大矩形的面积。

样例输入 Sample Input

6 2 4 2 6 5 1 7

样例输出 Sample Output

20

数据范围及提示 Data Size & Hint

数据范围: 1 <= n <= 1000,1 <= hi <= 10000,1 <= w<= 100。

真的疯了aaaaaaaa

求思路,最好附部分代码,不要框架,不要网址

蟹蟹蟹蟹٩('ω')و


0
0
被禁言 张皓轩
张皓轩
中级光能
中级光能
核心:
int n,w,now,ans=0;
    cin>>n>>w;
    for(int i=1;i<=n;i++){
        cin>>h[i];
    }
    for(int i=1;i<=n;i++){
        now=w*h[i];
        for(int j=i-1;j>=1;j--){
            if(h[j]>=h[i]){
                now+=w*h[i];
            }else{
                break;
            }
        }
        for(int j=i+1;j<=n;j++){
            if(h[j]>=h[i]){
                now+=w*h[i];
            }else{
                break;
            }
        }
        if(now>ans){
            ans=now;
        }
    }
    cout<<ans;
定义:
int h[1001];

 

0
陈曦
陈曦
资深天翼
资深天翼
        cnt=1;
        for(int j=i-1;j>=1;j--){
            if(h[j]>=h[i]){
                cnt++;
            }
            else{
                break;
            }
        }
        for(int j=i+1;j<=n;j++){
            if(h[j]>=h[i]){
                cnt++;
            }
            else{
                break;
            }
        }
        s=cnt*w*h[i];
        maxn=max(maxn,s);

外面有个遍历到 n 的循环(i)。

0
0
蒋文瀚
蒋文瀚
新手光能
新手光能

必须往左推和往右推,每一个值也是这样,只要这个值比它大,就加上自己,以此类推,知道遍历到尽头或遇到被它小的数时,停止遍历,与mx(最大值)进行比较

(提示):贪心算法

我要回答