LOJ 2304 「NOI2017」泳池——思路+DP+常系数线性齐次递推
题目:https://loj.ac/problem/2304
看了各种题解……
\( dp[i][j] \) 表示有 i 列、第 j 行及以下默认合法,第 j+1 行至少有一个非法格子的概率,满足最大合法矩形面积 <= lm。其中第 j 行及以下的部分的贡献是 1 而不是 q 的几次方。
那么有 \( dp[i][j]=dp[i][j+1]*p^i + \sum\limits_{k=1}^{i}dp[k-1][j+1]*p^{k-1}*(1-p)*dp[i-k][j] \)
注意到当 i>k 的时候,最底下一行必然有至少一个位置是非法的。所以令 \(ans_i\) 表示 i 列的概率,有 \( ans_i = \sum\limits_{j=1}^{i}ans_{j-1}*(1-p)*dp[i-j][1]*p^{i-j} \)
\(ans_i\) 的初值就是 dp[i][0] 。注意 dp[0][*]=1 。然后可以用常系数线性齐次递推的知识优化。
注意清空数组。注意别把 n 的值真的改掉。
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #define ll long long
- using namespace std;
- const int N=,M=N<<,mod=;
- int upt(int x){while(x>=mod)x-=mod;while(x<)x+=mod;return x;}
- int pw(int x,int k)
- {int ret=;while(k){if(k&)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=;}return ret;}
- int n,q,q2,f[N][N],bin[N],a[N],ans[M],b[M],c[M],lm;
- void Mul(int *u,int *v)//(lm-1)'
- {
- memset(c,,sizeof c);
- for(int i=;i<lm;i++)
- for(int j=;j<lm;j++)
- c[i+j]=(c[i+j]+(ll)u[i]*v[j])%mod;
- for(int i=*(lm-);i>=lm;i--)
- if(c[i])
- for(int j=;j<=lm;j++)
- c[i-j]=(c[i-j]+(ll)c[i]*a[j])%mod;
- memcpy(u,c,sizeof *lm);//0~lm-1
- }
- int solve(int tmp)
- {
- lm=tmp; memset(f,,sizeof f);
- for(int j=;j<=lm+;j++)f[][j]=;//lm+1 not lm!!!
- for(int i=;i<=lm;i++)
- for(int j=lm/i;j>=;j--)
- {
- int tp=(ll)f[i][j+]*bin[i]%mod;
- for(int k=;k<=i;k++)
- {
- int ml=(ll)f[k-][j+]*f[i-k][j]%mod;
- ml=(ll)ml*q2%mod*bin[k-]%mod;
- tp=upt(tp+ml);
- }
- f[i][j]=tp;
- }
- if(n<=lm)return f[n][]; lm++;
- for(int i=;i<=lm;i++)
- {
- int tp=(ll)f[i-][]*bin[i-]%mod;
- a[i]=(ll)tp*q2%mod;//not lm-i
- }
- memset(ans,,sizeof ans);////
- memset(b,,sizeof b);////
- ans[]=b[]=; int tn=n;//////
- while(tn)
- {
- if(tn&)Mul(ans,b); Mul(b,b); tn>>=;
- }
- int ret=;
- for(int i=;i<lm;i++)
- ret=(ret+(ll)ans[i]*f[i][])%mod;
- return ret;
- }
- int main()
- {
- int x,y,k;scanf("%d%d%d%d",&n,&k,&x,&y);
- q=(ll)x*pw(y,mod-)%mod; q2=upt(-q);
- bin[]=;
- for(int i=;i<=k;i++)bin[i]=(ll)bin[i-]*q%mod;
- printf("%d\n",upt(solve(k)-solve(k-)));
- return ;
- }
LOJ 2304 「NOI2017」泳池——思路+DP+常系数线性齐次递推的更多相关文章
- LOJ#2304. 「NOI2017」泳池
$n \leq 1e9$底边长的泳池,好懒啊泥萌自己看题吧,$k \leq 1000$.答案对998244353取膜. 现在令$P$为安全,$Q$为危险的概率.刚好$K$是极其不好算的,于是来算$\l ...
- LOJ 3090 「BJOI2019」勘破神机——斯特林数+递推式求通项+扩域
题目:https://loj.ac/problem/3090 题解:https://www.luogu.org/blog/rqy/solution-p5320 1.用斯特林数把下降幂化为普通的幂次求和 ...
- 【BZOJ4944】[NOI2017]泳池(线性常系数齐次递推,动态规划)
[BZOJ4944][NOI2017]泳池(线性常系数齐次递推,动态规划) 首先恰好为\(k\)很不好算,变为至少或者至多计算然后考虑容斥. 如果是至少的话,我们依然很难处理最大面积这个东西.所以考虑 ...
- loj #2305. 「NOI2017」游戏
#2305. 「NOI2017」游戏 题目描述 小 L 计划进行 nnn 场游戏,每场游戏使用一张地图,小 L 会选择一辆车在该地图上完成游戏. 小 L 的赛车有三辆,分别用大写字母 AAA.BBB. ...
- 「NOI2017」泳池
DP式子比后面的东西难推多了 LOJ2304 Luogu P3824 UOJ #316 题意 给定一个长度为$ n$高为$ \infty$的矩形 每个点有$ 1-P$的概率不可被选择 求最大的和底边重 ...
- 【BZOJ4944】【NOI2017】泳池 概率DP 常系数线性递推 特征多项式 多项式取模
题目大意 有一个\(1001\times n\)的的网格,每个格子有\(q\)的概率是安全的,\(1-q\)的概率是危险的. 定义一个矩形是合法的当且仅当: 这个矩形中每个格子都是安全的 必须紧贴网格 ...
- LOJ 6435 「PKUSC2018」星际穿越——DP+倍增 / 思路+主席树
题目:https://loj.ac/problem/6435 题解:https://www.cnblogs.com/HocRiser/p/9166459.html 自己要怎样才能想到怎么做呢…… dp ...
- loj#2305. 「NOI2017」游戏 2-sat
链接 https://loj.ac/problem/2305 https://www.luogu.org/problemnew/show/P3825 思路 3-sat神马的就不要想了,NP问题 除去x ...
- loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)
题意 题目链接 Sol 质数的限制并没有什么卵用,直接容斥一下:答案 = 忽略质数总的方案 - 没有质数的方案 那么直接dp,设\(f[i][j]\)表示到第i个位置,当前和为j的方案数 \(f[i ...
随机推荐
- Chrome开发小技巧--浏览器控制台现写并运行js代码--snippets
想简单等运行一段js代码,以前可能会新建一个html 里面包含script标签,或者引入一个js,然后chrome浏览器打开.这样很麻烦. 想再console控制台写,也不方便,换行处理麻烦. 基于在 ...
- PHP 开启错误显示并设置错误报告级别
警告:生产环境永远都不要显示任何错误信息! 显示错误(display_errors)和错误报告(error_reporting)是两回事.PHP 脚本发生错误时,可以根据设置选择是否报告这个错误(记录 ...
- Nginx 模块 - ngx_http_rewrite_module
原文地址 ngx_http_rewrite_module 模块用于通过 PCRE 正则表达式改变请求 URI,返回重定向并可以有条件地选择配置. break.if.return.rewrite 以及 ...
- Ecshop 商品详情页如何添加立即购买按钮
1,加到位置 <li class="add_cart_li"> <a href="javascript:addToCart1({$goods.goods ...
- python学习第十四天字典的del(),pop().popitem(),clear()删除方法
字典的每个键值 key=>value 数据类型,字典的key是唯一的,Value可以一样 names={'玖乐公司网址':‘www.96net.com.cn’,"电池网":' ...
- MVC与设计模式的关系及MVC的实现原理和设计原理
1 MVC介绍 众所周知MVC不是设计模式,是一个比设计模式更大一点的模式,称作设计模式不合理,应该说MVC它是一种软件开发架构模式,它包含了很多的设计模式,最为密切是以下三种:Observer (观 ...
- Linux统计文件内容
wc:统计文件的行数.单词数.字节数(word count) - wc char.txt:统计出文件char.txt的换行符个数.单词数.字节数 (char.txx有14行.13个单词.66字节) - ...
- 20個命令行工具監控 Linux 系統性能
對於每個系統管理員或網路管理員來說,每天要監控和調試 Linux 系統性能問題都是非常困難的工作.我已經有5年 Linux 管理員的工作經歷,知道如何監控系統使其保持正常運行.為此,我們編寫了對於 L ...
- ELKStack之极速入门(上)
ELKStack之极速入门(上) 链接:https://pan.baidu.com/s/1V2aYpB86ZzxL21Hf-AF1rA 提取码:7izv 复制这段内容后打开百度网盘手机App,操作更方 ...
- 在vCenter上创建新用户 (适用版本6.0)