농경지 개수【DP】
7582 단어 DP
제목:
너의 고향은 하북 농촌에 있다.설을 쇨 때 너는 고향에 가서 세배를 한다.너희 집에는 N M 농지가 있는데, 이를 N M의 격자 행렬로 보고, 어떤 격자 행렬은 수역이다.너의 농촌 아저씨는 네가 컴퓨터를 배운다는 말을 듣고 너에게 문제를 냈다. 그는 너에게 물었다. 이 농지는 모두 수역이 존재하지 않는 정사각형 농지를 얼마나 많이 포함하고 있느냐고.
두 정사각형 농경지는 서로 다르기 때문에 적어도 아래의 두 가지 조건 중 하나를 포함해야 한다.
모서리 길이가 같지 않습니다.
왼쪽 상단의 격자는 같은 격자가 아니다
입력:
데이터 입력 첫 번째 행위는 빈칸에서 분리된 두 개의 정수 N, M(1<=m 두 번째 줄에서 N+1 줄까지 줄마다 M개의 숫자(0 또는 1)가 있어 이 농지를 묘사한다.0은 이 네모가 수역이고 그렇지 않으면 농토임을 나타낸다(주의: 숫자 사이에 빈칸이 없고 줄마다 빈칸이 나타나지 않는다)
샘플 입력: 3 3
1 1 0
1 1 0
0 0 0
출력:
조건을 충족시키는 정사각형 농지 개수.
샘플 출력: 5
아이디어:
(1) F[I, J]를 설정하면 사각형(I, J)을 오른쪽 하각으로 하고 얻을 수 있는 최대 무수 정사각형의 길이를 나타낸다. 만약에 (I, J)가 수역이라면 F[I, J]=0;그렇지 않으면 F[I,J]=Min{F[I-1,J],F[I,J-1],F[I-1,J-1]}+1
(2) F수 그룹의 값을 구한 후에 우리는 F1[I]로 F수 그룹의 값이 I인 개수를 나타낼 수 있다.
(3) 모서리 길이가 I인 정사각형의 수를 Sum[I]로 가정하면 Sum[I]=Sum[I+1]+F1[I]
(4) 마지막으로 Sum수 그룹의 각 값의 합을 계산하여 문제의 해를 풀기만 하면 된다.
코드: #include
#include
using namespace std;
int n,m,sum,f[1001][1001];// 。
char c;
int main()
{
scanf("%d%d",&n,&m);// 。
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
c=getchar();//
while(!(c>='0')&&(c<='9'))c=getchar();// 。
if (c==49)
f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;//
sum=sum+f[i][j];// 。
}
printf("%d",sum);// 。
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[BOJ]11048(python)
python 풀이
DP를 이용해 풀이
보통 이런 문제는 dfs나 bfs로 풀이하는 것이여서
고민을 했는데
이 문구 덕분에 DP 를 이용해 풀이할 수 있었다
뒤로 돌아가는 등의 경우를 고려하지 않아도 되기 때문이다
코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
데이터 입력 첫 번째 행위는 빈칸에서 분리된 두 개의 정수 N, M(1<=m 두 번째 줄에서 N+1 줄까지 줄마다 M개의 숫자(0 또는 1)가 있어 이 농지를 묘사한다.0은 이 네모가 수역이고 그렇지 않으면 농토임을 나타낸다(주의: 숫자 사이에 빈칸이 없고 줄마다 빈칸이 나타나지 않는다)
샘플 입력: 3 3
1 1 0
1 1 0
0 0 0
출력:
조건을 충족시키는 정사각형 농지 개수.
샘플 출력: 5
아이디어:
(1) F[I, J]를 설정하면 사각형(I, J)을 오른쪽 하각으로 하고 얻을 수 있는 최대 무수 정사각형의 길이를 나타낸다. 만약에 (I, J)가 수역이라면 F[I, J]=0;그렇지 않으면 F[I,J]=Min{F[I-1,J],F[I,J-1],F[I-1,J-1]}+1
(2) F수 그룹의 값을 구한 후에 우리는 F1[I]로 F수 그룹의 값이 I인 개수를 나타낼 수 있다.
(3) 모서리 길이가 I인 정사각형의 수를 Sum[I]로 가정하면 Sum[I]=Sum[I+1]+F1[I]
(4) 마지막으로 Sum수 그룹의 각 값의 합을 계산하여 문제의 해를 풀기만 하면 된다.
코드: #include
#include
using namespace std;
int n,m,sum,f[1001][1001];// 。
char c;
int main()
{
scanf("%d%d",&n,&m);// 。
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
c=getchar();//
while(!(c>='0')&&(c<='9'))c=getchar();// 。
if (c==49)
f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;//
sum=sum+f[i][j];// 。
}
printf("%d",sum);// 。
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[BOJ]11048(python)
python 풀이
DP를 이용해 풀이
보통 이런 문제는 dfs나 bfs로 풀이하는 것이여서
고민을 했는데
이 문구 덕분에 DP 를 이용해 풀이할 수 있었다
뒤로 돌아가는 등의 경우를 고려하지 않아도 되기 때문이다
코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
3 3
1 1 0
1 1 0
0 0 0
조건을 충족시키는 정사각형 농지 개수.
샘플 출력: 5
아이디어:
(1) F[I, J]를 설정하면 사각형(I, J)을 오른쪽 하각으로 하고 얻을 수 있는 최대 무수 정사각형의 길이를 나타낸다. 만약에 (I, J)가 수역이라면 F[I, J]=0;그렇지 않으면 F[I,J]=Min{F[I-1,J],F[I,J-1],F[I-1,J-1]}+1
(2) F수 그룹의 값을 구한 후에 우리는 F1[I]로 F수 그룹의 값이 I인 개수를 나타낼 수 있다.
(3) 모서리 길이가 I인 정사각형의 수를 Sum[I]로 가정하면 Sum[I]=Sum[I+1]+F1[I]
(4) 마지막으로 Sum수 그룹의 각 값의 합을 계산하여 문제의 해를 풀기만 하면 된다.
코드: #include
#include
using namespace std;
int n,m,sum,f[1001][1001];// 。
char c;
int main()
{
scanf("%d%d",&n,&m);// 。
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
c=getchar();//
while(!(c>='0')&&(c<='9'))c=getchar();// 。
if (c==49)
f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;//
sum=sum+f[i][j];// 。
}
printf("%d",sum);// 。
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[BOJ]11048(python)
python 풀이
DP를 이용해 풀이
보통 이런 문제는 dfs나 bfs로 풀이하는 것이여서
고민을 했는데
이 문구 덕분에 DP 를 이용해 풀이할 수 있었다
뒤로 돌아가는 등의 경우를 고려하지 않아도 되기 때문이다
코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
5
(1) F[I, J]를 설정하면 사각형(I, J)을 오른쪽 하각으로 하고 얻을 수 있는 최대 무수 정사각형의 길이를 나타낸다. 만약에 (I, J)가 수역이라면 F[I, J]=0;그렇지 않으면 F[I,J]=Min{F[I-1,J],F[I,J-1],F[I-1,J-1]}+1
(2) F수 그룹의 값을 구한 후에 우리는 F1[I]로 F수 그룹의 값이 I인 개수를 나타낼 수 있다.
(3) 모서리 길이가 I인 정사각형의 수를 Sum[I]로 가정하면 Sum[I]=Sum[I+1]+F1[I]
(4) 마지막으로 Sum수 그룹의 각 값의 합을 계산하여 문제의 해를 풀기만 하면 된다.
코드: #include
#include
using namespace std;
int n,m,sum,f[1001][1001];// 。
char c;
int main()
{
scanf("%d%d",&n,&m);// 。
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
c=getchar();//
while(!(c>='0')&&(c<='9'))c=getchar();// 。
if (c==49)
f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;//
sum=sum+f[i][j];// 。
}
printf("%d",sum);// 。
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[BOJ]11048(python)
python 풀이
DP를 이용해 풀이
보통 이런 문제는 dfs나 bfs로 풀이하는 것이여서
고민을 했는데
이 문구 덕분에 DP 를 이용해 풀이할 수 있었다
뒤로 돌아가는 등의 경우를 고려하지 않아도 되기 때문이다
코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
#include
#include
using namespace std;
int n,m,sum,f[1001][1001];// 。
char c;
int main()
{
scanf("%d%d",&n,&m);// 。
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
c=getchar();//
while(!(c>='0')&&(c<='9'))c=getchar();// 。
if (c==49)
f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;//
sum=sum+f[i][j];// 。
}
printf("%d",sum);// 。
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[BOJ]11048(python)python 풀이 DP를 이용해 풀이 보통 이런 문제는 dfs나 bfs로 풀이하는 것이여서 고민을 했는데 이 문구 덕분에 DP 를 이용해 풀이할 수 있었다 뒤로 돌아가는 등의 경우를 고려하지 않아도 되기 때문이다 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.