测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A31430. 吉利矩阵

填空题 中等

题目描述

吉利矩阵

题目描述

所有元素为非负整数,且各行各列的元素和都等于 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; int l, n, ans; int xx[5], yy[5]; void dfs(int); int main() { cin >> l >> n; dfs(0); cout << ans; return 0; } void dfs(int idx) { if (n * n == idx) { ans ++; return; } for (int i = 0; i <= l; i ++) { int x, y; x = idx / n; y = idx % n; if (xx[x] + i > l || yy[y] + i > l) continue; if (x == n - 1 ) i = l - yy[y];// if (x == n - 1 && yy[y] + i < l) continue;本来是这个,但是我们可以直接让i等于我们需要的那个值。两种都可以过 if (y == n - 1 ) i = l - xx[x]; xx[x] += i; yy[y] += i; dfs(idx + 1); xx[x] -= i; yy[y] -= i; } }

答案解析

#include<iostream>

using namespace std;

const int N=20;

int a[N][N];

int main() {

int l,n;

cin>>l>>n;

a[2][2]=3;

a[2][3]=21;

a[2][4]=282;

a[3][2]=4;

a[3][3]=55;

a[3][4]=2008;

a[4][2]=5;

a[4][3]=120;

a[4][4]=10147;

a[5][2]=6;

a[5][3]=231;

a[5][4]=40176;

a[6][2]=7;

a[6][3]=406;

a[6][4]=132724;

a[7][2]=8;

a[7][3]=666;

a[7][4]=381424;

a[8][2]=9;

a[8][3]=1035;

a[8][4]=981541;

a[9][2]=10;

a[9][3]=1540;

a[9][4]=2309384;

cout<<a[l][n];

}

上一题 下一题