博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2003 [Hnoi2010]Matrix 矩阵
阅读量:6251 次
发布时间:2019-06-22

本文共 1658 字,大约阅读时间需要 5 分钟。

题目链接

题解

考虑搜索。

确定了第一行和第一列,那么就确定了整个矩阵,因此搜索的范围可以降到399个位置。

首先搜索第一行,显然每个不是第一行第一列的位置都可以由三个位置唯一确定:(1,1),(1,i),(j,1)(1,1),(1,i),(j,1)(1,1),(1,i),(j,1)。由于搜索的是第一行,可以把(i,j)(i,j)(i,j)这个位置=0=0=0=p−1=p-1=p1都带入一遍,得到的结果就是(j,1)(j,1)(j,1)的上下界。如果搜索的过程中发现冲突了那么说明第一行这样填不行,剪枝。

代码

#include 
#include
int read(){
int x=0,f=1; char ch=getchar(); while((ch<'0')||(ch>'9')) {
if(ch=='-') {
f=-f; } ch=getchar(); } while((ch>='0')&&(ch<='9')) {
x=x*10+ch-'0'; ch=getchar(); } return x*f;} const int maxn=200; int n,m,p,a[maxn+10][maxn+10],l[maxn+10][maxn+10],r[maxn+10][maxn+10]; int f(int x){
return (x&1)?1:-1;} int search(int y){
if(y>m) {
return 1; } for(a[1][y]=0; a[1][y]
c) {
std::swap(b,c); } l[y][i]=std::max(l[y-1][i],b); r[y][i]=std::min(r[y-1][i],c); if(l[y][i]>r[y][i]) {
flag=0; break; } } if(flag) {
if(search(y+1)) {
return 1; } } } return 0;} int main(){
n=read(); m=read(); p=read(); for(int i=1; i<=n; ++i) {
for(int j=1; j<=m; ++j) {
a[i][j]=read(); } } for(int i=2; i<=n; ++i) {
for(int j=2; j<=m; ++j) {
a[i][j]-=a[i-1][j]+a[i][j-1]+a[i-1][j-1]; } } for(int i=2; i<=n; ++i) {
l[1][i]=0; r[1][i]=p-1; } for(a[1][1]=0; a[1][1]

转载于:https://www.cnblogs.com/Canopus-wym/p/10376135.html

你可能感兴趣的文章
异常处理汇总 ~ 修正果带着你的Code飞奔吧!
查看>>
jdbc
查看>>
百度地图需要的效果-有感
查看>>
查看 NPM、Yarn 全局安装的包
查看>>
[BZOJ 2140]稳定婚姻(强连通分量)
查看>>
人工智能工程师学习路线
查看>>
Nginx入门(2)反向代理和负载均衡
查看>>
MySQL库表状态查询
查看>>
【鲁班学院】干货分享!《面试必备之Mysql索引底层原理分析》
查看>>
第十一周项目0-是春哥啊
查看>>
poi做一个简单的EXCAL
查看>>
几种查询emacs帮助的办法
查看>>
Python_基础_(模块,time,random,os,sys,json,shelve,xml,序列化反序列化)
查看>>
异常:Project configuration is not up-to-date with pom.xml解决方案
查看>>
HDU2647 拓扑排序
查看>>
ThinkPHP/---微信支付PC流程
查看>>
JavaScript 05
查看>>
python 多线程编程之threading模块(Thread类)创建线程的三种方法
查看>>
实验三
查看>>
水仙花数
查看>>