高级守护
最大的矩形(rec)经验值:1200
不许抄袭,一旦发现,直接清空经验!
题目描述 Description
经过精心的计算,卡卡西终于帮助白胡子和黑胡子两位巫师分出了胜负,他们也遵守承诺打开了锁链。最终,卡卡西在四又四分之三号站台登上“和谐号”魔法快车,来到了世界魔法大学的门口。但此时她却惊讶地发现魔法大学被石头紧紧的裹住,转了一圈也没有发现大门,这是怎么回事呢?
原来,大学门口有一个很大的广场,而广场的顶部有着大小不一的长方形透光栅格,这些格子沿着屋顶的一侧整齐的排列着,它们的底部宽度一样,但是高度随着阳光照射的角度不同而时刻变化着,并在地上投影出变化着的影子,而这些影子所组成的直方图里面的最大矩形就是变化着的学校的大门-阴影之门,你能帮助卡卡西找出阴影之门的变化规律,准确说出阴影大门的面积,从而进入魔法学校么?
在横轴上放了n个相邻的矩形,每个矩形的宽度是w(所有矩形宽度一致),而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n 个矩形构成了一个直方图。
例如,下图中六个矩形的高度就分别是4, 2, 6, 5, 1, 7。宽度w=2。
输入描述 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
求思路,最好附部分代码,不要框架,不要网址
蟹蟹蟹蟹٩('ω')و
中级光能
核心:
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];
资深天翼
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)。