题面传送门 题意: 给出 \(n,p\),求有多少 \(n\) 位数 \(X=a_1a_2a_3\dots a_n\) 满足: 该 \(n\) 位数不含前导零 \(a_i \leq a_{i+1}\) \(X\) 为 \(p\) 的倍数. 答案对 \(998244353\) 取模. \(1 \leq n \leq 10^{18}\),\(1 \leq p \leq 500\). CSP 之前做的了,隔了好久才把题解补了... 本题的突破口在于怎样处理 \(a_i \leq a_{i+1}\) 这…
洛谷 这大概是我真正意义上的第一道黑题吧! 自己想出了一个大概,状态转移方程打错了一点点,最后还是得看题解. 一句话题意:求出有多少个\(n\)位的数,满足各个位置上的数字从左到右不下降,且被\(p\)整除. 刚开始没有看到数位不下降这个条件,于是自信满满的喊了一句:"这是假黑题吧!" 后来发现了,想了好久好久才找到一条规律... 对于任意一个\(n\)位的数,因为要求满足数位不下降,所以一定可以拆分成\(0,1,11,111,1111,11111--\)的和. 又因为数字最大是\(9…
luogu 题目中的那个大数一定是若干个1+若干个2+若干个3...+若干个9组成的,显然可以转化成9个\(\underbrace {111...1}_{a_i个1}(0\le a_1\le a_2\le a_3...\le a_9,a_9=n)\)之和 然后模数只有500,所以可以考虑处理出所有\(\mod p =i\)的不同长度的\(111...1\)个数记为\(cnt_i\),考虑dp求答案,设\(f_{i,j,k}\)表示考虑了前\(i\)个剩余类,用了\(j\)个\(111...1\)…
P2481 SDOI2010代码拍卖会 $ solution: $ 这道题调了好久好久,久到都要放弃了.洛谷的第五个点是真的强,简简单单一个1,调了快4个小时! 这道题第一眼怎么都是数位DP,奈何数据范围太大,只能找性质.而这道题最重要的一个性质也很套路(敲难想),因为我们所有的方案都是 $ 111112223333 $ 这样的数,我们要求的是它的大小模 $ p $ ,所以我们考虑将它用加法拆解.于是我们惊奇的发现它可以转化成(以上面那个数为例) $ 111111111111+1111111+1…
洛谷 P2014 选课(树形背包) 思路 题面:洛谷 P2014 如题这种有依赖性的任务可以用一棵树表示,因为一个儿子要访问到就必须先访问到父亲.然后,本来本题所有树是森林(没有共同祖先),但是题中的节点\(0\)其实就可以当做一个LCA,从节点\(0\)开始dp. 状态定义:\(dp[x][m]\)x节点,选则m课,获得的最大学分 决策时,类比背包,遍历每一个状态,用儿子的状态更新 dp转移方程(已优化一维): \[ dp[x][i] = max{dp[x][i-j]+dp[son(x)][j…
洛谷P4525 [模板]自适应辛普森法1 与P4526[模板]自适应辛普森法2 P4525洛谷传送门 P4525题目描述 计算积分 结果保留至小数点后6位. 数据保证计算过程中分母不为0且积分能够收敛. 输入格式 一行,包含6个实数a,b,c,d,L,R 输出格式 一行,积分值,保留至小数点后6位. 输入输出样例 输入 #1复制 1 2 3 4 5 6 输出 #1复制 2.732937 我的理解 求面积 说明/提示 a,b,c,d∈[-10,10] -100≤L<R≤100 且 R-L≥1 So…
BZOJ原题链接 洛谷原题链接 先讲下关于波动数列的\(3\)个性质. 性质\(1\):对于数列中的每一对\(i\)和\(i + 1\),若它们不相邻,那么交换这两个数形成的依旧是一个波动数列. 性质\(2\):对于任何一个由\(1\sim n\)组成的波动数列,将每个数\(a_i\)变为\(n + 1 - a_i\),形成的依旧是波动数列,且山峰和山谷与原先的数列刚好相反. 性质\(3\):波动数列有对称性,即一个波动数列倒过来依旧是波动数列. 由性质\(3\),我们可以只考虑第一个数为山峰的…
题目传送门:洛谷 P4389. 题意简述: 有 \(n\) 个物品,每个物品都有无限多,第 \(i\) 个物品的体积为 \(v_i\)(\(v_i\le m\)). 问用这些物品恰好装满容量为 \(i\) 的背包的方案数,两个方案不同当且仅当存在某一个物品的选取数量不同. 你需要对 \(i\in [1,m]\) 回答,答案对 \(998,244,353\) 取模. 题解: 对于一个体积为 \(v\) 的物品,它装满容量为 \(x\) 的背包的方案数序列为 \(a_x=[v|x]\). 例如 \(…
洛谷 我讲的应该没有这个[https://www.luogu.org/blog/user55639/solution-p2467]清楚. 贴个代码算了: #include <bits/stdc++.h> using namespace std; int n,p,f[2][5000]; int main() { cin>>n>>p; bool t=0; f[t][1]=1; for (int i=2;i<=n;++i) { t=!t; for (int j=1;j&…
来了来了,随便拽一道题写题解[大雾] 最近发现自己基础奇差于是开始复习之前学过的东西,正好主席树我几乎完全没学会,然后打开洛谷试炼场… 发现了这么一道二合一的题. 这道题其实分成两个部分,前50%是一道题,后50%是另一道.观察数据范围的时候发现两种范围差别很大,似乎具有针对性,于是分开来想. 再仔细一看,书页的范围p小于等于1000,似乎在暗示值域上可以搞什么幺蛾子. 前50%是矩阵上的问题,c和r小于等于200.题目要求在一个矩形内凑出某一高度,正好值域很小,可以想到用二维前缀和记录一下每种…