hdu 1510-O(n^3)枚举

来源:互联网 发布:网络最短路径算法 编辑:程序博客网 时间:2024/05/20 11:28

题目链接:点击打开链接


题解:预先处理好每个点向上延伸的最长长度,然后枚举每个点,向左去最小高度,然后加上就OK了;


代码:

#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#include<queue>using namespace std;typedef long long ll;const int mx = 2e2+10;int r[mx][mx],n,m; char str[mx][mx];void get_rc(){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(str[i][j]=='.'){r[i][j]=r[i-1][j]+1;}else{r[i][j]=0;}}}}int main(){memset(r[1],0,sizeof(r[1]));//freopen("1in","r",stdin);while(~scanf("%d",&n)){for(int i=1;i<=n;i++) scanf("%s",str[i]+1);get_rc();int ans=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int minn = r[i][j];ans+=minn;for(int k=j-1;k>=1&&minn;k--){minn=min(minn,r[i][k]);ans+=minn;}}}printf("%d\n",ans);}return 0;}


原创粉丝点击