단순 동적 계획(POJ 1609 Tiling Up Blocks 문제 해결 보고서)
우리가 보여준 l과 r의 데이터 범위가 비교적 작다는 것을 보면 1에서 100이다. 그러면 우리는 dp 데이터로 dp[i][j]가 (i, j)가 나타난 횟수를 나타낸다. 그리고 우리가 제목에 따라 요구하는 규칙에 따라 i>=i'&&&j>=j'가 필요하다. 그래서 우리는 상태 dp[i][j]는 i'<=i&j'<=j'<=j'의 가장 큰 누적화를 나타낸다. 그러면 우리는 상태 이동 방정식을 다음과 같이 찾을 수 있다.마지막으로 Blocks를 출력하는 데 대응하는 가장 큰 누적과 요구되는 높이입니다.
아래에 내 코드를 첨부합니다(비교적 간결하다).
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int Max=10010;
typedef struct NODE
{
int l,r;
NODE(){}
NODE(int tl,int tr)
{
l=tl;
r=tr;
}
}Node;
Node blocks[Max];
int dp[110][110];
int main()
{
int n,ans;
while(scanf("%d",&n)&&n)
{
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
{
scanf("%d %d",&blocks[i].l,&blocks[i].r);
dp[blocks[i].l][blocks[i].r]++;
}
for(int i=1;i<=100;i++)
{
for(int j=1;j<=100;j++)
{
dp[i][j]+=max(dp[i-1][j],dp[i][j-1]);
}
}
int ans=0;
for(int i=0;i<n;i++)
{
if(dp[blocks[i].l][blocks[i].r]>ans)
ans=dp[blocks[i].l][blocks[i].r];
}
printf("%d
",ans);
}
printf("*
");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
9-1. 구조체와 클래스 비교, 구조체 개념(struct)구조체와 클래스는 프로그램 코드의 구성요소가 되는 범용 구조이다. 상수, 변수, 그리고 함수를 정의하는 것과 같은 구문을 사용해서 구조체와 클래스에 프로퍼티와 메서드를 기능적으로 추가할 수 있다. 스위프트에서 클래스...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.