博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常州day1p3
阅读量:6957 次
发布时间:2019-06-27

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

给定一个 n 行 m 列的方格,每个格子里有一个正整数 a,1 ≤ a ≤ k,k ≤ n∗m 假设你当前时刻站在 (i,j) 这个格子里,你想要移动到 (x,y),那必须满足以下三个条件 1:i < x 2:j < y 3:第 i 行第 j 列格子里的数不等于第 x 行第 y 列格子里的数 求从 (1,1) 移动到 (n,m) 的不同的方案数 

对于 100% 的数据,n,m ≤ 750

容易想到f[i][j]=sigma(f[k][l]|a[k][l]!=a[i][j])

我们可以容易的统计和颜色无关的情况然后去掉颜色相同的就可以了。

于是我们对每一种颜色建立一颗权值线段树

动态开点

时间复杂度O(n^2logn)

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define re register#define il inlineusing namespace std;const int N=1001,NN=8000001;const int mod=1000000007;int n,m,a[N][N],k,root[NN],lch[NN],rch[NN],cnt=0;int f[N][N],s[N][N],w[NN];il int read(){ re int hs=0;re char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)){ hs=(hs<<3)+(hs<<1)+c-'0'; c=getchar(); } return hs;}il void add(re int &i,re int l,re int r,re int p,re int v){ if(i==0) i=(++cnt); w[i]=(w[i]+v)%mod; if(l==r) return; re int mid=(l+r)/2; if(p<=mid) add(lch[i],l,mid,p,v); else add(rch[i],mid+1,r,p,v); }il int sum(re int i,re int l,re int r,re int p,re int q){ if(!i) return 0; if(l==p&&r==q) return w[i]; re int mid=(l+r)/2; if(q<=mid) return sum(lch[i],l,mid,p,q); if(mid

 

转载于:https://www.cnblogs.com/ExiledPoet/p/5771471.html

你可能感兴趣的文章
启动级别:init 0-6
查看>>
mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
查看>>
Java四种引用类型
查看>>
TIOBE 6 月编程语言榜:TypeScript 首次跻身前100
查看>>
Fedora 31 将更新开源 .Net 框架,支持 Mono 5
查看>>
Emulator 29.0.3 Canary 发布,Android 模拟器
查看>>
react-native之android环境搭建
查看>>
5分钟入门AWK
查看>>
GPS定位系统怎么定位监控,如何快速二次开发行业应用 ...
查看>>
Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境 ...
查看>>
1月2日云栖精选夜读 | 阿里巴巴达摩院发布2019十大科技趋势:语音AI在特定领域通过图灵测试 ...
查看>>
阿里云中间件有哪些?这里最全面
查看>>
scrapy自带文件下载器,实现多层级目录结构的存储 ...
查看>>
批处理 启动和关闭 Oracle 11g 服务
查看>>
解决WIN7启动DHCP服务报1075错误办法
查看>>
移动端弹性滑动以及vue记录滑动位置
查看>>
Windows10 VS2017 C++信号处理
查看>>
GPS定位系统源码GPS定位系统 GPSBD专为二次开发而设计 ...
查看>>
LocalDateTime API 整理
查看>>
ASK动画获三千资本A+轮投资,将加速推进原创动漫作品的创作 ...
查看>>