博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jzoj6311-Mobitel【dp,整除分块】
阅读量:2024 次
发布时间:2019-04-28

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

正题


题目大意

n ∗ m n*m nm的矩阵,求有多少条路径的乘积不小于 S S S


解题思路

我们用总路径数减去乘积小于 S S S的路径数

我们很容易想到用 f i , j , k f_{i,j,k} fi,j,k表示到 ( i , j ) (i,j) (i,j)这个点,然后乘积之和为 k k k d p dp dp。但是时间复杂度 O ( n m S ) O(nmS) O(nmS)显然难以胜任本题。

我们考虑将 S − 1 S-1 S1整除分块,用 f i , j , k f_{i,j,k} fi,j,k表示 ( i , j ) (i,j) (i,j)这个点时,再乘上一个大于等于 k k k的数就会大于等于 S S S

然后我们可以得到动态转移方程

f i , j , k = f i − 1 , j , z + f i , j − 1 , z ( z = S − 1 ⌊ S − 1 k ⌋ ∗ a i , j ) f_{i,j,k}=f_{i-1,j,z}+f_{i,j-1,z}(z=\frac{S-1}{\lfloor\frac{S-1}{k}\rfloor*a_{i,j}}) fi,j,k=fi1,j,z+fi,j1,z(z=kS1ai,jS1)

然后 k k k只有 2 ∗ S 2*\sqrt S 2S ,所以时间复杂度 O ( n m S ) O(nm\sqrt S) O(nmS )


c o d e code code

#include
#include
#include
#include
using namespace std;const int XJQ=1e9+7,N=310;int n,m,s,t,a[N][N],f[2][N][5000],ans,num[5000],v[1100000],c[N][N],cnt;int main(){
freopen("mobitel.in","r",stdin); freopen("mobitel.out","w",stdout); scanf("%d%d%d",&n,&m,&s); c[1][0]=1;s--; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) c[i][j]=(c[i][j-1]+c[i-1][j])%XJQ; for(int i=1,k;i<=s;i=k+1){
k=s/(s/i); num[++cnt]=s/i; v[num[cnt]]=cnt; } /*for(int i=s;i>=1;i--) v[i]=v[i]?v[i]:v[i+1];*/ for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); f[1][1][v[s/a[1][1]]]=1; for(int i=1;i<=n;i++){
memset(f[~i&1],0,sizeof(f[~i&1])); for(int j=1;j<=m;j++) for(int k=1;k<=cnt;k++){
int z=num[k]; if(!f[i&1][j][k]) continue; if(i
0) (f[~i&1][j][v[z/a[i+1][j]]]+=f[i&1][j][k])%=XJQ; if(j
0) (f[i&1][j+1][v[z/a[i][j+1]]]+=f[i&1][j][k])%=XJQ; } } for(int k=1;k<=cnt;k++) (ans+=f[n&1][m][k])%=XJQ; printf("%d",(c[n][m]-ans+XJQ)%XJQ);}

转载地址:http://sukaf.baihongyu.com/

你可能感兴趣的文章
微信小程序商业级实战
查看>>
spring系列之事物
查看>>
小s探秘之HTTP和HTTPS
查看>>
转载extern用法详解
查看>>
关于android.jar里的java.net.URLEncoder.encode()和jdk里的java.net.URLEncoder.encode()出现的问题...
查看>>
Vue(2)- v-model、局部组件和全局组件、父子组件传值、平行组件传值
查看>>
python数据类型一(重点是字符串的各种操作)
查看>>
is和==的区别以及编码、解码
查看>>
网络基础、多线程、ftp任务铺垫
查看>>
进程、数据共享、进程锁、进程池、requests模块和bs4(beautifulsoup)模块
查看>>
Django组件 - forms组件
查看>>
Vue(3)- 安装脚手架、过滤器、生命周期的钩子函数、vue-router基本使用
查看>>
DRF(1) - REST、DRF(View源码解读、APIView源码解读)
查看>>
Pycharm配置同步服务器
查看>>
日期时间变量的处理
查看>>
爬虫 selenium
查看>>
python爬虫
查看>>
流程控制语句
查看>>
决策树 Decision Tree
查看>>
用PBD制作餐饮店KPI分析仪-入门篇
查看>>