题意
给你一个 01 矩阵,一条从左上到右下的路径,可以表述为 DR
的字符串和 01
串。构造填数方案,满足 DR
串小的 01
串一定大。
Solution:
考点:数学+搜索+找规律/推式子。
算法一.
性质一: 对于任意 (i,j) 满足 b[i][j]<=b[i-1][j+1], 因为只有这样才不会出现交叉的情况。该条件对于 n=2 是充要条件,加上爆搜可以得到 45pts
性质二:对于 n=3 打表可以发现下列数据:
0 0 0
0 0 1
0 0 0
观察得到 a[0][1]=a[1][0] ,但是会出现交叉情况,此时要求以 (i,j+1) 为左上角的对角线值相等,结合性质一剪枝可以得到 n,m<=8 的方案数,得分 65pts
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
int n,m,cnt,b[15][15];
bool vis[15][1000005];
int ans[15][15];
ll res;
//20 ~ 40 pts
bool check2(int x,int y){
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
vis[i][j]=