列表

详情


NC19999. [HAOI2016]放棋子

描述

给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案。

输入描述

第一行一个N,接下来一个N*N的矩阵。N ≤ 200,0表示没有障碍,1表示有障碍,输入格式参考样例

输出描述

一个整数,即合法的方案数。

示例1

输入:

2
0 1
1 0

输出:

1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Java 解法, 执行用时: 48ms, 内存消耗: 10952K, 提交时间: 2022-10-27 20:16:11

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		BigInteger[] f = new BigInteger[201];
		f[1] = BigInteger.ZERO;
		f[2] = BigInteger.ONE;
		for (int i = 3; i <= 200; i++)
			f[i]=f[i-1].add(f[i-2]).multiply(BigInteger.valueOf(i-1));
		Scanner in=new Scanner(System.in);
		System.out.println(f[in.nextInt()]);
	}

}

pypy3 解法, 执行用时: 164ms, 内存消耗: 26384K, 提交时间: 2022-04-23 10:56:07

def read_ints():
    return list(map(int, input().split()))

n = int(input())
grid = [read_ints() for i in range(n)]

d = [0] * (n+1)
d[1] = 0
d[2] = 1

for i in range(3, n+1):
    d[i] = (i-1) * (d[i-1]+d[i-2])

print(d[n])

Python3(3.9) 解法, 执行用时: 22ms, 内存消耗: 2836K, 提交时间: 2021-04-29 16:59:47

n = int(input())
f = [ 0,0,1 ]
for i in range(3,n+1):
    f.append((i-1)*(f[i-1]+f[i-2]))
print(f[n])

上一题