萌新求条悬赏一关
查看原帖
萌新求条悬赏一关
760171
Binah_cyc楼主2024/3/17 20:10

rt,A了47个

#include<bits/stdc++.h>
using namespace std;
int k,n,m,a[15],b[15],od[15];
bool rot[15];
bool vis[15][15];
void solve()
{
	int id=1;
	memset(vis,0,sizeof(vis));
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=m; j++)
		{
			if(vis[i][j]) continue;
			if(id>k) return ;
			int nh=a[od[id]],nw=b[od[id]];
			if(rot[od[id]]) swap(nh,nw);
			if(i+nh-1>n||j+nw-1>m) return ;
			for(int i2=i; i2<i+nh; i2++)
			{
				for(int j2=j; j2<j+nh; j2++)
				{
					if(vis[i2][j2]) return ;
					vis[i2][j2]=1;
				}
			}
			id++;
//			cout<<i<<' '<<j<<endl;
		}
	}
	for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) if(!vis[i]) return ;
//	for(int i=1; i<=k; i++) cout<<od[i]<<' ';
//	cout<<endl;
//	for(int i=1; i<=k; i++) cout<<rot[i]<<' ';
//	cout<<endl;
//	cout<<id<<endl;
	cout<<"Yes";
	exit(0);
}
void dfs(int now)
{
	if(now==k+1) return solve();
	rot[now]=1;
	dfs(now+1);
	rot[now]=0;
	dfs(now+1);
}
signed main()
{
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>k>>n>>m;
	for(int i=1; i<=k; i++) cin>>a[i]>>b[i],od[i]=i;
	do
	{
		dfs(1);
	}
	while(next_permutation(od+1,od+k+1));
	cout<<"No";
	return 0;
}
*/
2024/3/17 20:10
加载中...