国产探花免费观看_亚洲丰满少妇自慰呻吟_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]); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淮滨县| 六安市| 元氏县| 玉田县| 青河县| 察雅县| 龙里县| 突泉县| 彭州市| 凌云县| 侯马市| 新昌县| 龙口市| 沂水县| 依兰县| 平遥县| 普洱| 闻喜县| 上犹县| 栾城县| 郴州市| 义乌市| 湖北省| 左云县| 革吉县| 高清| 兰西县| 舟山市| 扶余县| 开原市| 南安市| 南京市| 同心县| 乐山市| 义马市| 临夏市| 孟村| 顺平县| 北安市| 枞阳县| 莆田市|