题目解读
所有元素为非负整数,且各行各列的元素和都等于 7 的 3×3 方阵称为“吉利矩阵”,因为这样的矩阵一共有 666 种。
本题就请你统计一下,把 7 换成任何一个 [2,9] 区间内的正整数 L,把矩阵阶数换成任何一个 [2,4] 区间内的正整数 N,满足条件“所有元素为非负整数,且各行各列的元素和都等于 L”的 N×N 方阵一共有多少种?
输入格式:
输入在一行中给出 2 个正整数 L 和 N,意义如题面所述。数字间以空格分隔。
输出格式:
在一行中输出满足题目要求条件的方阵的个数。
思路
DFS+剪枝
从矩阵左上角开始枚举所有可能填入的元素,根据条件进行剪枝优化。
#include<bits/stdc++.h>
using namespace std;
const int N = 10;
int r[N],c[N];//行和,列和
int ans;
int l,n;
void dfs(int x,int y){
if(x>n){
ans++;
return ;
}
for(int i=0; i<=9; i++){
r[x]+=i,c[y]+=i;
if(r[x]>l || c[y]>l){
r[x]-=i;
c[y]-=i;
continue;
}
if(x==n){
if(c[y]!=l){
r[x]-=i;
c[y]-=i;
continue;
}
}
if(y==n){
if(r[x]!=l){
r[x]-=i;
c[y]-=i;
continue;
}else dfs(x+1,1);
}else dfs(x,y+1);
r[x]-=i,c[y]-=i;
}
return ;
}
int main(){
//元素和为l 矩阵阶数为n
cin >> l >> n;
dfs(1,1);
cout << ans;
return 0;
}
参考
B站up主 一天五顿饭
🌻编写本篇文章目的是笔者想以输出的形式进行学习,顺便记录学习点滴🌻
🌹 如果本篇文章对你有帮助的话那就点个赞吧👍🌹
😇 本篇文章可能存在多处不足,如有修改意见,可以私信或者评论我哦 😇

89

被折叠的 条评论
为什么被折叠?



