国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

hihocoder 1469 福字 (dp)

2019-11-08 01:57:54
字體:
來源:轉載
供稿:網友

描述

新年到了,你收到了一副畫。你想找到里面最大的福字。

一副畫是一個n × n的矩陣,其中每個位置都是一個非負整數。

一個福字被定義成是大小為 k 的正方形,滿足其中的每個位置上的數都恰好比他的左邊的那個和上邊的那個大1(如果左邊或上邊的那個不存在的話就無此要求)。

比如

1 2 3 2 3 4 3 4 5

就是一個福字。(注意左上角可以是任何非負整數)。

你想找到這個矩陣中最大的福字的大小。

輸入

第一行一個數 n,表示矩陣大小。(n ≤ 1000)

接下來 n 行,每行 n 個數,表示這個矩陣。矩陣中的數在0到108之間。

輸出

一行一個數表示最大的福字的大小。

樣例輸入

41 2 3 02 3 4 03 4 5 00 0 0 0

樣例輸出

3

思路

dp[i][j]表示以第i行第j列元素為矩陣右下角所能得到的最大福字的大小。

對于這一個矩陣,dp[i][j]對于dp[i-1][j]來說屬于豎向擴充。

同理,dp[i][j]對于dp[i][j-1]來說屬于橫向擴充。

因此,在a[i-1][j]+1==a[i][j]&&a[i][j-1]+1==a[i][j]成立的前提下(擴充福字),dp[i][j]=dp[i-1][j-1]+1

其他條件便只能由所在一個元素去構成一個福字矩陣了,大小dp[i][j]=1

AC 代碼

#include<bits/stdc++.h>#define N 1005using namespace std;int n,ans,a[N][N],dp[N][N];int main(){ scanf("%d",&n); for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) { scanf("%d",&a[i][j]); if(a[i-1][j]+1==a[i][j]&&a[i][j-1]+1==a[i][j]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=1; ans=max(ans,dp[i][j]); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清涧县| 元阳县| 荥阳市| 双柏县| 石狮市| 临漳县| 丰都县| 深水埗区| 民和| 芦山县| 卢湾区| 江阴市| 城市| 乌鲁木齐县| 保康县| 兴国县| 文山县| 浦城县| 鞍山市| 奉节县| 定日县| 新干县| 乐昌市| 聂拉木县| 天津市| 额济纳旗| 东阿县| 益阳市| 壤塘县| 宜城市| 呼伦贝尔市| 景德镇市| 贺州市| 麻阳| 河西区| 宝应县| 交城县| 昌图县| 郎溪县| 南陵县| 沭阳县|