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;
}