지하 궁전 에서 보물 을 채취 하 다.
3137 단어 블 루 브리지 컵 준비 알고리즘
사고방식: 이 문 제 를 처음 접 했 을 때 가장 먼저 생각 나 는 것 은 모든 가능성 을 귀속 시 키 는 것 이다. 그러나 그 중에서 대량의 중복 계산 이 존재 한다. 데이터 가 너무 크 면 시간 을 초과 할 수 있다 (코드 는 다음 과 같다). 그 다음 에 다른 사람의 코드 를 참고 하여 기억 으로 검색 하고 싶다.
코드 1 (권장 하지 않 음 참고 만 제공)
#include
#define MAX 1000000007
#define M 51
int values[M][M]={0};
int n=0,m=0,k=0;
int count=0;
void search(int own,int max,int x,int y);
int main(void)
{
int i=0,j=0;
scanf("%d %d %d",&n,&m,&k);
for(i=0;i=n||y>=m||own>k) return;
if(x==n-1&&y==m-1&&(own==k||own==k-1&&values[x][y]>max))
{
count++;
count = count%MAX;
return;
}
if(values[x][y]>max)
{
search(own+1,values[x][y],x+1,y);
search(own+1,values[x][y],x,y+1);
}
search(own,max,x+1,y);
search(own,max,x,y+1);
}
코드 2 (기억 검색, dfs):
#include
#include
#define M 55
#define N 15
#define MOD %1000000007
int State[M][M][N][N]; // ,n ,m , own, max
int values[M][M]={0}; //
int n=0,m=0,k=0;
int search(int x,int y,int own,int max);
int main(void)
{
memset(State,-1,sizeof(State)); // -1( 0)
int i=0,j=0;
scanf("%d %d %d",&n,&m,&k);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",*(values+i)+j);
}
}
printf("%d",search(1,1,0,-1));
return 0;
}
int search(int x,int y,int own,int max)
{
// -1, ( )
if(State[x][y][own][max+1]!=-1) return State[x][y][own][max+1];
int sum=0,tmp=0;
if(x==n&&y==m) //
{
if(own==k||own==k-1&&values[x][y]>max)
{
State[x][y][own][max+1] = 1;
}
else State[x][y][own][max+1] = 0;
return State[x][y][own][max+1];
}
else
{
// max, ,
if(values[x][y]>max)
{
tmp = values[x][y];
if(x+1<=n)
sum = (sum+search(x+1,y,own+1,tmp))MOD;
if(y+1<=m)
sum = (sum+search(x,y+1,own+1,tmp))MOD;
}
if(x+1<=n) sum = (sum+search(x+1,y,own,max))MOD;
if(y+1<=m) sum = (sum+search(x,y+1,own,max))MOD;
State[x][y][own][max+1] = sum;
return sum;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
지하 궁전 에서 보물 을 채취 하 다.어떤 칸 을 지나 갈 때 그 칸 에 있 는 보물 의 가치 가 샤 오 밍 의 손 에 있 는 어떤 보물 보다 크다 면 샤 오 밍 은 그것 을 들 수 있다 (물론 안 들 수도 있다). 샤 오 밍 이 출구 에 도 착 했 을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.