题目链接
题目大意
给你一个长宽为\(w,h(1 \leq w,h \leq 30)\)的长方形
你要放\(1\times 1,2\times 2,.....k\times k\)的正方形
每个正方形放一个,看最多能放到几个正方形
若答案是ans
则表示可以放\(1\times 1,2\times 2,.....ans\times ans\)
题目思路
数据范围比较小,而且感觉细节很多
直接打表 大概几分钟就行
其实表还有很多细节可以去优化,还可以加快打表速度
打表代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef long long ll;
typedef pair<double,int> pdi;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=500+5,mod=1e7;
int w,h;
bool vis[40][40];
bool flag=0;
bool check(int x,int y,int len){
for(int i=x;i<=x+len-1;i++){
for(int j=y;j<=y+len-1;j++){
if(vis[i][j]) return 0;
}
}
return 1;
}
void col(int x,int y,int len,int val){
for(int i=x;i<=x+len-1;i++){
for(int j=y;j<=y+len-1;j++){
vis[i][j]=val;
}
}
}
void dfs(int x){
if(flag){
return ;
}
if(x==0){
flag=1;
return ;
}
for(int i=1;i<=w-x+1;i++){
for(int j=1;j<=h-x+1;j++){
if(check(i,j,x)){
col(i,j,x,1);
dfs(x-1);
col(i,j,x,0);
}
}
}
}
int main(){
for(w=1;w<=30;w++){
for(h=w;h<=30;h++){
for(int i=30;i>=1;i--){
flag=0;
dfs(i);
if(flag){
printf("a[%d][%d]=%d;\n",w,h,i);
break;
}
}
}
}
return 0;
}
代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef long long ll;
typedef pair<double,int> pdi;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=500+5,mod=1e7;
int w,h;
int a[40][40];
int main(){
a[1][1]=1;
a[1][2]=1;
a[1][3]=1;
a[1][4]=1;
a[1][5]=1;
a[1][6]=1;
a[1][7]=1;
a[1][8]=1;
a[1][9]=1;
a[1][10]=1;
a[1][11]=1;
a[1][12]=1;
a[1][13]=1;
a[1][14]=1;
a[1][15]=1;
a[1][16]=1;
a[1][17]=1;
a[1][18]=1;
a[1][19]=1;
a[1][20]=1;
a[1][21]=1;
a[1][22]=1;
a[1][23]=1;
a[1][24]=1;
a[1][25]=1;
a[1][26]=1;
a[1][27]=1;
a[1][28]=1;
a[1][29]=1;
a[1][30]=1;
a[2][2]=1;
a[2][3]=2;
a[2][4]=2;
a[2][5]=2;
a[2][6]=2;
a[2][7]=2;
a[2][8]=2;
a[2][9]=2;
a[2][10]=2;
a[2][11]=2;
a[2][12]=2;
a[2][13]=2;
a[2][14]=2;
a[2][15]=2;
a[2][16]=2;
a[2][17]=2;
a[2][18]=2;
a[2][19]=2;
a[2][20]=2;
a[2][21]=2;
a[2][22]=2;
a[2][23]=2;
a[2][24]=2;
a[2][25]=2;
a[2][26]=2;
a[2][27]=2;
a[2][28]=2;
a[2][29]=2;
a[2][30]=2;
a[3][3]=2;
a[3][4]=2;
a[3][5]=3;
a[3][6]=3;
a[3][7]=3;
a[3][8]=3;
a[3][9]=3;
a[3][10]=3;
a[3][11]=3;
a[3][12]=3;
a[3][13]=3;
a[3][14]=3;
a[3][15]=3;
a[3][16]=3;
a[3][17]=3;
a[3][18]=3;
a[3][19]=3;
a[3][20]=3;
a[3][21]=3;
a[3][22]=3;
a[3][23]=3;
a[3][24]=3;
a[3][25]=3;
a[3][26]=3;
a[3][27]=3;
a[3][28]=3;
a[3][29]=3;
a[3][30]=3;
a[4][4]=2;
a[4][5]=3;
a[4][6]=3;
a[4][7]=3;
a[4][8]=3;
a[4][9]=4;
a[4][10]=4;
a[4][11]=4;
a[4][12]=4;
a[4][13]=4;
a[4][14]=4;
a[4][15]=4;
a[4][16]=4;
a[4][17]=4;
a[4][18]=4;
a[4][19]=4;
a[4][20]=4;
a[4][21]=4;
a[4][22]=4;
a[4][23]=4;
a[4][24]=4;
a[4][25]=4;
a[4][26]=4;
a[4][27]=4;
a[4][28]=4;
a[4][29]=4;
a[4][30]=4;
a[5][5]=3;
a[5][6]=3;
a[5][7]=4;
a[5][8]=4;
a[5][9]=4;
a[5][10]=4;
a[5][11]=4;
a[5][12]=5;
a[5][13]=5;
a[5][14]=5;
a[5][15]=5;
a[5][16]=5;
a[5][17]=5;
a[5][18]=5;
a[5][19]=5;
a[5][20]=5;
a[5][21]=5;
a[5][22]=5;
a[5][23]=5;
a[5][24]=5;
a[5][25]=5;
a[5][26]=5;
a[5][27]=5;
a[5][28]=5;
a[5][29]=5;
a[5][30]=5;
a[6][6]=3;
a[6][7]=4;
a[6][8]=4;
a[6][9]=4;
a[6][10]=4;
a[6][11]=4;
a[6][12]=5;
a[6][13]=5;
a[6][14]=5;
a[6][15]=5;
a[6][16]=5;
a[6][17]=5;
a[6][18]=6;
a[6][19]=6;
a[6][20]=6;
a[6][21]=6;
a[6][22]=6;
a[6][23]=6;
a[6][24]=6;
a[6][25]=6;
a[6][26]=6;
a[6][27]=6;
a[6][28]=6;
a[6][29]=6;
a[6][30]=6;
a[7][7]=4;
a[7][8]=4;
a[7][9]=5;
a[7][10]=5;
a[7][11]=5;
a[7][12]=5;
a[7][13]=5;
a[7][14]=5;
a[7][15]=6;
a[7][16]=6;
a[7][17]=6;
a[7][18]=6;
a[7][19]=6;
a[7][20]=6;
a[7][21]=6;
a[7][22]=7;
a[7][23]=7;
a[7][24]=7;
a[7][25]=7;
a[7][26]=7;
a[7][27]=7;
a[7][28]=7;
a[7][29]=7;
a[7][30]=7;
a[8][8]=4;
a[8][9]=5;
a[8][10]=5;
a[8][11]=5;
a[8][12]=5;
a[8][13]=5;
a[8][14]=5;
a[8][15]=6;
a[8][16]=6;
a[8][17]=6;
a[8][18]=6;
a[8][19]=6;
a[8][20]=6;
a[8][21]=6;
a[8][22]=7;
a[8][23]=7;
a[8][24]=7;
a[8][25]=7;
a[8][26]=7;
a[8][27]=7;
a[8][28]=7;
a[8][29]=7;
a[8][30]=8;
a[9][9]=5;
a[9][10]=5;
a[9][11]=6;
a[9][12]=6;
a[9][13]=6;
a[9][14]=6;
a[9][15]=6;
a[9][16]=6;
a[9][17]=6;
a[9][18]=7;
a[9][19]=7;
a[9][20]=7;
a[9][21]=7;
a[9][22]=7;
a[9][23]=7;
a[9][24]=7;
a[9][25]=7;
a[9][26]=8;
a[9][27]=8;
a[9][28]=8;
a[9][29]=8;
a[9][30]=8;
a[10][10]=5;
a[10][11]=6;
a[10][12]=6;
a[10][13]=6;
a[10][14]=6;
a[10][15]=6;
a[10][16]=6;
a[10][17]=6;
a[10][18]=7;
a[10][19]=7;
a[10][20]=7;
a[10][21]=7;
a[10][22]=7;
a[10][23]=7;
a[10][24]=7;
a[10][25]=7;
a[10][26]=8;
a[10][27]=8;
a[10][28]=8;
a[10][29]=8;
a[10][30]=8;
a[11][11]=6;
a[11][12]=6;
a[11][13]=6;
a[11][14]=7;
a[11][15]=7;
a[11][16]=7;
a[11][17]=7;
a[11][18]=7;
a[11][19]=7;
a[11][20]=7;
a[11][21]=8;
a[11][22]=8;
a[11][23]=8;
a[11][24]=8;
a[11][25]=8;
a[11][26]=8;
a[11][27]=8;
a[11][28]=8;
a[11][29]=8;
a[11][30]=9;
a[12][12]=6;
a[12][13]=7;
a[12][14]=7;
a[12][15]=7;
a[12][16]=7;
a[12][17]=7;
a[12][18]=7;
a[12][19]=7;
a[12][20]=7;
a[12][21]=8;
a[12][22]=8;
a[12][23]=8;
a[12][24]=8;
a[12][25]=8;
a[12][26]=8;
a[12][27]=8;
a[12][28]=8;
a[12][29]=8;
a[12][30]=9;
a[13][13]=7;
a[13][14]=7;
a[13][15]=7;
a[13][16]=7;
a[13][17]=8;
a[13][18]=8;
a[13][19]=8;
a[13][20]=8;
a[13][21]=8;
a[13][22]=8;
a[13][23]=8;
a[13][24]=9;
a[13][25]=9;
a[13][26]=9;
a[13][27]=9;
a[13][28]=9;
a[13][29]=9;
a[13][30]=9;
a[14][14]=7;
a[14][15]=8;
a[14][16]=8;
a[14][17]=8;
a[14][18]=8;
a[14][19]=8;
a[14][20]=8;
a[14][21]=8;
a[14][22]=8;
a[14][23]=8;
a[14][24]=9;
a[14][25]=9;
a[14][26]=9;
a[14][27]=9;
a[14][28]=9;
a[14][29]=9;
a[14][30]=9;
a[15][15]=8;
a[15][16]=8;
a[15][17]=8;
a[15][18]=8;
a[15][19]=8;
a[15][20]=9;
a[15][21]=9;
a[15][22]=9;
a[15][23]=9;
a[15][24]=9;
a[15][25]=9;
a[15][26]=9;
a[15][27]=10;
a[15][28]=10;
a[15][29]=10;
a[15][30]=10;
a[16][16]=8;
a[16][17]=8;
a[16][18]=8;
a[16][19]=8;
a[16][20]=9;
a[16][21]=9;
a[16][22]=9;
a[16][23]=9;
a[16][24]=9;
a[16][25]=9;
a[16][26]=9;
a[16][27]=10;
a[16][28]=10;
a[16][29]=10;
a[16][30]=10;
a[17][17]=8;
a[17][18]=9;
a[17][19]=9;
a[17][20]=9;
a[17][21]=9;
a[17][22]=9;
a[17][23]=9;
a[17][24]=10;
a[17][25]=10;
a[17][26]=10;
a[17][27]=10;
a[17][28]=10;
a[17][29]=10;
a[17][30]=10;
a[18][18]=9;
a[18][19]=9;
a[18][20]=9;
a[18][21]=9;
a[18][22]=9;
a[18][23]=10;
a[18][24]=10;
a[18][25]=10;
a[18][26]=10;
a[18][27]=10;
a[18][28]=10;
a[18][29]=10;
a[18][30]=11;
a[19][19]=9;
a[19][20]=9;
a[19][21]=9;
a[19][22]=10;
a[19][23]=10;
a[19][24]=10;
a[19][25]=10;
a[19][26]=10;
a[19][27]=11;
a[19][28]=11;
a[19][29]=11;
a[19][30]=11;
a[20][20]=9;
a[20][21]=10;
a[20][22]=10;
a[20][23]=10;
a[20][24]=10;
a[20][25]=10;
a[20][26]=11;
a[20][27]=11;
a[20][28]=11;
a[20][29]=11;
a[20][30]=11;
a[21][21]=10;
a[21][22]=10;
a[21][23]=10;
a[21][24]=10;
a[21][25]=10;
a[21][26]=11;
a[21][27]=11;
a[21][28]=11;
a[21][29]=11;
a[21][30]=11;
a[22][22]=10;
a[22][23]=10;
a[22][24]=10;
a[22][25]=11;
a[22][26]=11;
a[22][27]=11;
a[22][28]=11;
a[22][29]=11;
a[22][30]=11;
a[23][23]=10;
a[23][24]=11;
a[23][25]=11;
a[23][26]=11;
a[23][27]=11;
a[23][28]=11;
a[23][29]=12;
a[23][30]=12;
a[24][24]=11;
a[24][25]=11;
a[24][26]=11;
a[24][27]=11;
a[24][28]=11;
a[24][29]=12;
a[24][30]=12;
a[25][25]=11;
a[25][26]=11;
a[25][27]=11;
a[25][28]=12;
a[25][29]=12;
a[25][30]=12;
a[26][26]=11;
a[26][27]=11;
a[26][28]=12;
a[26][29]=12;
a[26][30]=12;
a[27][27]=12;
a[27][28]=12;
a[27][29]=12;
a[27][30]=12;
a[28][28]=12;
a[28][29]=12;
a[28][30]=12;
a[29][29]=12;
a[29][30]=12;
a[30][30]=12;
scanf("%d%d",&w,&h);
if(w>=h){
swap(w,h);
}
printf("%d\n",a[w][h]);
return 0;
}