로곡P1002 하졸 입문dp

1676 단어 dp
[제목]:https://www.luogu.org/problemnew/show/P1002
[생각]:
dp[i][j]=dp[i-1][j]+dp[i][j-1]
[주의]
말이 도착할 수 있는 위치의 값은 0이다
[경계 위치]
말이 초기 위치에 도달하지 못하면 dp[0][0]=1
만약 "말의 위치"가 왼쪽에 있다면, 그 위에는 모두 0 이다
"말 위치"가 아래쪽에 있으면 오른쪽이 모두 0입니다
[코드]
#include
#define fuck(x) std::cout<"<=0) {
        vis[x+2][y-1]=1;
        mp[x+2][y-1]=0;
    }
    if(y-2>=0) {
        vis[x+1][y-2]=1;
        mp[x+1][y-2]=0;
    }
    if(x-1>=0) {
        vis[x-1][y+2]=1;
        mp[x-1][y+2]=0;
    }
    if(x-2>=0) {
        vis[x-2][y+1]=1;
        mp[x-2][y+1]=0;
    }
    if(x-2>=0&&y-1>=0) {
        vis[x-2][y-1]=1;
        mp[x-2][y-1]=0;
    }
    if(x-1>=0&&y-2>=0) {
        vis[x-1][y-2]=1;
        mp[x-1][y-2]=0;
    }
}


int main() {
    int bx,by;
    scanf("%d%d",&bx,&by);
    int mx,my;
    scanf("%d%d",&mx,&my);
    ch(mx,my);
    for(int i=0; i<=bx; i++) {
        if(vis[i][0]==0) {
            mp[i][0]=1;
            vis[i][0]=1;
        }
        else break;
    }
    for(int i=1; i<=by; i++) {
        if(vis[0][i]==0) {
            mp[0][i]=1;
            vis[0][i]=1;
        }
        else break;
    }
    for(int i=1; i<=bx; i++) {
        for(int j=1; j<=by; j++) {
            if(vis[i][j])
                continue;
            mp[i][j]=mp[i-1][j]+mp[i][j-1];
        }
    }
    printf("%lld
",mp[bx][by]); return 0; }

좋은 웹페이지 즐겨찾기