L2-4 吉利矩阵
暴力解法:L2-4 吉利矩阵-优快云博客
作者 陈越
单位 浙江大学
所有元素为非负整数,且各行各列的元素和都等于 7 的 3×3 方阵称为“吉利矩阵”,因为这样的矩阵一共有 666 种。
本题就请你统计一下,把 7 换成任何一个 [2,9] 区间内的正整数 L,把矩阵阶数换成任何一个 [2,4] 区间内的正整数 N,满足条件“所有元素为非负整数,且各行各列的元素和都等于 L”的 N×N 方阵一共有多少种?
输入格式:
输入在一行中给出 2 个正整数 L 和 N,意义如题面所述。数字间以空格分隔。
输出格式:
在一行中输出满足题目要求条件的方阵的个数。
输入样例:
7 3
输出样例:
666
网上看别人写的,确实厉害
#include<iostream>
using namespace std;
const int N=10;
int l,n;
int res;//记录结果
int row[10],col[10];
void dfs(int x,int y){
if(y>n-1)y=1,x=x+1;//只判断n-1层是否合法
if(x==n){//只判断n-1层是否合法
int sum1=0,sum2=0;
for(int i=1;i<n;i++)sum1+=(l-row[i]);
for(int i=1;i<n;i++)sum2+=(l-col[i]);
if(sum1<=l&&sum2<=l)res++;
return;
}
for(int i=0;i<=l-row[x]&&i<=l-col[y];i++){
row[x]+=i;
col[y]+=i;
dfs(x,y+1);
row[x]-=i;
col[y]-=i;
}
}
int main(){
scanf("%d %d",&l,&n);
res=0;
dfs(1,1);
printf("%d",res);
}
就是只判断n-1行和n-1列 来判断是否合法
有空补过程了