정사각형 파괴
#include
#include
#include
using namespace std;
const int maxs = 60;
const int maxm = 60;
int ans;
int square, n, k; //square
int contains[maxs][maxm], size[maxs], fullsize[maxs]; //contain[ num ][ stick] num stick
int stick[maxm];
void init(){
scanf("%d%d", &n, &k);
for(int i = 1; i <= 2*n*(n+1); i++) stick[i] = 1; //
while(k--){
int v;
scanf("%d", &v);
stick[v] = 0;
}
//printf("test
");
//for(int i = 1; i < 2*n*(n+1); i++) printf("%d ", stick[i]);
//printf("%d
", stick[2*n*(n+1)]);
square = 0;
memset(contains, 0, sizeof(contains));
for(int len = 1; len <= n; len++){
for(int x = 0; x <= n-len; x++){
for(int y = 0; y <= n-len; y++){
size[square] = 0;
fullsize[square] = 4*len;
for(int j = 1; j <= len; j++){
int up = (2*n+1)*y+x+j;
int down = (2*n+1)*(y+len)+x+j;
int left = (2*n+1)*(y+j)+x-n;
int right = (2*n+1)*(y+j)+x+len-n;
contains[square][up] = 1;
contains[square][down] = 1;
contains[square][left] = 1;
contains[square][right] = 1;
// if(len == 2){
// printf("x %d y %d j %d",x,y,j);
// printf(" up %d down %d left %d right %d
",up,down,left,right);
// }
size[square] += stick[up] + stick[down] + stick[left] + stick[right];
}
square++;
}
}
}
//for(int i = 0; i < square; i++){
// if(size[i] == fullsize[i]){
// printf("%d
",i);
// for(int j = 1; j <= 2*n*(n+1); j++){
// printf("%d ", contains[i][j]);
// }
// printf("
");
// }
//}
//for(int i = 0; i < square; i++){
// printf("%d ",size[i]);
//}
}
int count(){
for(int s = 0; s < square; s++){
if(size[s] == fullsize[s]) return s;
}
return -1;
}
void dfs(int dep){
if(dep>ans) return; //
int flag = count();
if(flag == -1){
ans = min(dep, ans);
return;
}//else{
for(int s = 1; s <= 2*n*(n+1); s++){
if(contains[flag][s]){
for(int i = 0; i < square; i++){
if(contains[i][s]) size[i]--;
}
dfs(dep+1);
for(int i = 0; i < square; i++){
if(contains[i][s]) size[i]++;
}
}
}
// }
}
int main(){
int T;
scanf("%d", &T);
while(T--){
init();
ans = n*n;
dfs(0);
printf("%d
",ans);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.