CSP201312-3最大的矩形 c语言(带注释)

//20131203

#include<stdio.h>

int main()
{
	int n;//矩形的数量n
	scanf("%d",&n);
	int arr[n];
	for(int i=0;i<n;i++)
		scanf("%d",&arr[i]);
	//遍历每个矩形
	int s=arr[0];//将最大的初始面积设置为第一个矩形的面积 
	int low=arr[0];//设置组合最低高度 
	int low_point=0;
	for(int i=1;i<n;i++)//从第二个开始遍历 
	{
		//判断是否更新最低高度low
		if(arr[i]<low)
		{
			low=arr[i];
			low_point=i;
		 } 
			 
		//先判断该矩形自己的面积
		if(arr[i]>s)
			s=arr[i];
		//再判断组合面积,组合面积由个数i+1和最低高度决定
		//从前往后遍历
		for(int j=0;j<i;j++)
		{
			int max=0;
			//当是最低高度之前的 
			if(j<=low_point)
			{
				max=(i+1-j)*low;
			} 
			//如果是最低点之后的
			else 
			{
				//找出该点到求点中最低点然后乘个数
				int low_in=arr[j];
				for(int k=j;k<=i;k++)
				{
					if(arr[k]<low_in)
						low_in=arr[k];
				} 
				max=(low_in)*(i+1-j);
//				printf("i:%d j:%d low_in:%d max:%d\n",i,j,low_in,max);
			} 
			if(max>s)
				s=max;
//			printf("%d\n",s);
		} 
//		printf("%d",s);
	} 
	printf("%d",s);




	return 0;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值