玄2关
查看原帖
玄2关
952033
lutaoquan2012楼主2024/3/25 19:45

rt.

WA 3求助

//
// Created by 55062 on 2024/3/25.
//
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
ll n,h,w,vis[20][20];
bool use[20];
struct node{
    ll x,y;
}a[10];
void dfs(ll x,ll y){
    /*cout<<x<<" "<<y<<endl;
    for(int i=1;i<=h;i++){
        for(int j=1;j<=w;j++) cout<<vis[i][j]<<" ";
        cout<<endl;
    }*/
    if(y>w) x++,y=1;
    if(x>h){
        cout<<"Yes";
        exit(0);
    }if(vis[x][y]!=0){
        dfs(x,y+1);
        return ;
    }
    for(int i=1;i<=n;i++){
        if(use[i]==true) continue;
        ll nx2=x+a[i].x-1,ny2=y+a[i].y-1,nx1=x,ny1=y;
        if(nx2>h||ny2>w) continue;
        bool flag=false;
        while(nx1<=nx2){
            for(int j=ny1;j<=ny2;j++)
                if(vis[nx1][j]!=0) {flag=true;break;}
            if(flag==true) break;
            nx1++;
        }if(flag==true) continue;
        nx2=x+a[i].x-1,ny2=y+a[i].y-1,nx1=x,ny1=y;
        while(nx1<=nx2){
            for(int j=ny1;j<=ny2;j++) vis[nx1][j]=i;
            nx1++;
        }use[i]=true;
        dfs(x,y+1);
        nx2=x+a[i].x-1,ny2=y+a[i].y-1,nx1=x,ny1=y;
        while(nx1<=nx2){
            for(int j=ny1;j<=ny2;j++) vis[nx1][j]=0;
            nx1++;
        }use[i]=false;
    }for(int i=1;i<=n;i++){
        if(use[i]==true||a[i].x==a[i].y) continue;
        ll nx2=x+a[i].y-1,ny2=y+a[i].x-1,nx1=x,ny1=y;
        if(nx2>h||ny2>w) continue;
        bool flag=false;
        while(nx1<=nx2){
            nx1++;
            for(int j=ny1;j<=ny2;j++)
                if(vis[nx1][j]!=0) {flag=true;break;}
        }if(flag==true) continue;
        nx2=x+a[i].y-1,ny2=y+a[i].x-1,nx1=x,ny1=y;
        while(nx1<=nx2){
            for(int j=ny1;j<=ny2;j++) vis[nx1][j]=i;
            nx1++;
        }use[i]=true;
        dfs(x,y+1);
        nx2=x+a[i].y-1,ny2=y+a[i].x-1,nx1=x,ny1=y;
        while(nx1<=nx2){
            for(int j=ny1;j<=ny2;j++) vis[nx1][j]=0;
            nx1++;
        }use[i]=false;
    }
}
int main() {
    cin>>n>>h>>w;
    for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
    dfs(1,1);
    cout<<"No";
    return 0;
}
2024/3/25 19:45
加载中...