House Building HDU - 5538

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了House Building HDU - 5538相关的知识,希望对你有一定的参考价值。

House Building HDU - 5538

题意:

有n * m的地方,每个地方都有不同高度的1 * 1的正方形块,相邻块紧密排列,问这些块的表面积是多少?

题解:

对于位置为(i,j)的一个高度为x的块,他的测表面积为4 * x,但是他会遮挡位置为(i-1,j)和(i,j-1)位置的块,被挡住的面积为更小高度者的二倍(因为两个块彼此紧靠,两者都损失这些面积),最后再加上顶面积

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\\n",a,b);
typedef long long ll;
using namespace std;

inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);
   return s*w;
}
const int maxn=100;
int a[maxn][maxn];
int main()
{
	int t;
	t=read();
	while(t--){
		int sum=0;
		memset(a,0,sizeof(a));
		int n=read(),m=read();
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				a[i][j]=read(); 
				if(a[i][j])sum++;
			}
		}
		
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				sum+=a[i][j]*4;
				if(a[i-1][j])//前面 
				{
					sum-=min(a[i-1][j],a[i][j])*2;
				}
				if(a[i][j-1]){
					sum-=min(a[i][j-1],a[i][j])*2;
				}
			}
		} 
		cout<<sum<<endl;
	}
	return 0;
}

以上是关于House Building HDU - 5538的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5538 House Building 瞎搞

hdu 5538 House Building(长春现场赛——水题)

HDU_5538_House Building

hdu 5538 House Building 矩阵表面积

House Building---hdu5538(求表面积水题)

House Building HDU - 5538