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

0
0
已解决
甄子烨
甄子烨
高级光能
高级光能

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

 

跪求思路!!!

@陈曦 ,我看了你的代码,但不知道思路,你能告诉我么,我踩你。


0
已采纳
李子杰
李子杰
资深光能
资深光能

我行,我刚问老师。

枚举每个矩形,然后以这个矩形为中心,看往左最远能到哪,往右最远能到哪,将他们的面积加起来

李子杰在2021-10-26 20:13:21追加了内容

    定义int a[10005],ans,maxn,n,w;
	输入n和w
	for(1~n){
		输入a[i]
	}
	for(1~n){
		ans=a[i]和w的积;
		for(i-1~1){
			如果(a[j]比a[i]大){
				ans加上a[i]和w的积;
			}
			否则{
				break跳出循环
			}
		}//向左的
		for(i+1~n){
			如果(a[j]比a[i]大){
				ans加上a[i]和w的积;
			}
			否则{
				break跳出循环
			}
		}//向右的
		最大值=max(ans,maxn);	
	}
	输出最大值
	

 

李子杰在2021-10-26 20:13:30追加了内容

    定义int a[10005],ans,maxn,n,w;
	输入n和w
	for(1~n){
		输入a[i]
	}
	for(1~n){
		ans=a[i]和w的积;
		for(i-1~1){
			如果(a[j]比a[i]大){
				ans加上a[i]和w的积;
			}
			否则{
				break跳出循环
			}
		}//向左的
		for(i+1~n){
			如果(a[j]比a[i]大){
				ans加上a[i]和w的积;
			}
			否则{
				break跳出循环
			}
		}//向右的
		最大值=max(ans,maxn);	
	}
	输出最大值
	

 

0
0
0
汪宇航
汪宇航
新手启示者
新手启示者

https://ke.codingtang.com/#/netCourse/weiCourseInfo?id=10428

#include <bits/stdc++.h>
using namespace std;
int h[1010];
int main(){
    int n,w,x=0,m=0;
    cin>>n>>w;
    for(int i=1;i<=n;i++)cin>>h[i];
    for(int i=1;i<=n;i++){
        x=w*h[i];
        for(int j=i-1;j>=1;j--){
            if(h[j]>=h[i])x+=w*h[i];
            else break;
        }
        for(int j=i+1;j<=n;j++){
            if(h[j]>=h[i])x+=w*h[i];
            else break;
        }
        m=max(m,x);
    }
    cout<<m;
    return 0;
}
/*
思路:从1至n一次进行**:看他往最左边能伸到哪儿,往右能伸到哪儿,最后算面积,用m取最大值
*/

 

0
武奕楷
武奕楷
新手天翼
新手天翼
for(int i=1;i<=n;i++){
        int minn=a[i];
        maxn=max(minn*m,maxn);
        for(int j=i+1;j<=n;j++){
            minn=min(minn,a[j]);
            maxn=max(minn*(m*(j-i+1)),maxn); 
        }
    }

 

0
0
0
0
我要回答