【题解】[NOIP2018 提高组] 填数游戏

题意

给你一个 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]=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值