#include<bits/stdc++.h>
using namespace std;
int res=0;
int sum_row[4]={0};
int sum_col[4]={0};
void dfs(int x,int sum,int width){
if(x==width*width){
++res;
return;
}
for(int i=0;i<=sum;i++){
if(x % width ==width-1 && i!=sum-sum_row[x / width])continue;
if(x / width ==width-1 && i!=sum-sum_col[x % width])continue;
if(sum_row[x / width]+i<=sum && sum_col[x % width]+i<=sum){
sum_col[x % width]+=i;sum_row[x/width]+=i;
dfs(x+1,sum,width);
sum_col[x % width]-=i;sum_row[x/width]-=i;
}
}
}
int main(){
int sum,width;
cin>>sum>>width;
dfs(0,sum,width);
cout<<res;
return 0;
}
注意点:
1 利用全局变量res存储个数。
2 和岛屿类似 这里用for循环进行寻找每种情况,并通过一加一减进行回溯