洛谷 P2733 家的范围 Home on the Range
题意
给出一个边长为n的正方形矩阵,农民约翰需要统计那些可以放牧奶牛的正方形牧场(至少是2x2的,在这些较大的正方形中没有一个点是被破坏的,也就是说,所有的点都是“1”)。 你的工作要在被供应的数据组里面统计所有不同的正方形放牧区域(>=2x2)的个数。当然,放牧区域可能是重叠。
做法
这道题用动态规划可以轻松过,数组f [ i ] [ j ]表示在矩阵中以第 i 行第 j 列的点为正方形的右下角的点所能构成的最大边长,如果这个点是 0 ,这个值就是 0;如果是 1,那么他就是f [ i - 1 ] [ j - 1 ] , f [ i - 1 ] [ j ] , f [ i ] [ j - 1 ] 中最小的那个 + 1。最后用一个数组存答案即可。
代码
#include <bits/stdc++.h> using namespace std; int n,f[255][255]; char a[255][255]; int s[255]; int main() { scanf("%d",&n); char t; for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) cin>>a[i][j]; } for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { if(a[i][j]=='0') continue; f[i][j] = min(min(f[i-1][j-1], f[i-1][j]), f[i][j-1]) + 1; } } for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) for(int k=1;k<=f[i][j];++k) s[k]++; for(int i=2;i<=n;++i) { if(s[i]) printf("%d %d\n",i,s[i]); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现