[ABC207E] Mod i 题解
题目大意
给定一个序列 \(a\),问将其划分成若干段,满足第 \(i\) 段的和是 \(i\) 的倍数的划分方案的个数。
思路分析
考虑 DP,设 \(f_{i,j}\) 表示将序列中前 \(i\) 个数划分成 \(j\) 段,且满足条件的划分方案的个数,容易得出状态转移方程:
\]
直接转移的复杂度是 \(O(n^3)\) 的,无法接受,考虑优化。
设 \(s_i\) 为 \(a\) 的前 \(i\) 项和,那么约束条件等价于 \((s_i-s_k) \bmod j=0\),当条件成立时有 \(s_i\equiv s_k \pmod j\)。
可以设 \(g_{i,j}=\sum f_{k,i}(s_k\bmod (i+1)=j)\),那么容易发现
\]
这样转移就优化到了 \(O(n^2)\),这是因为 \(g\) 可以在转移时累加,即
\]
其中包含 \(f_{i,j}\)。
代码
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N=3200,mod=1000000007;
#define int long long
int f[N][N],g[N][N];
int sum[N],a[N];
int ans,n;
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
sum[i]=sum[i-1]+a[i];
}
f[0][0]=g[0][0]=1;//初始条件
for(int i=1;i<=n;i++)
for(int j=n;j>=1;j--){
f[i][j]=g[j-1][sum[i]%j];
g[j][sum[i]%(j+1)]=(g[j][sum[i]%(j+1)]+f[i][j])%mod;
}
for(int i=1;i<=n;i++) ans=(ans+f[n][i])%mod;//累加答案
cout<<ans<<'\n';
return 0;
}
[ABC207E] Mod i 题解的更多相关文章
- 51NOD 1038:X^A Mod P——题解
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1038 X^A mod P = B,其中P为质数.给出P和A B,求< ...
- [CF-GYM]Abu Tahun Mod problem题解
前言 这道题比较简单,但我还是想了好一会 题意简述 Abu Tahun很喜欢回文. 一个数组若是回文的,那么它从前往后读和从后往前读都是一样的,比如数组\(\left\{1\right\},\left ...
- Codeforces Round #383 (Div. 2) 题解【ABCDE】
Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...
- FZU 1759 欧拉函数 降幂公式
Description Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000 ...
- 51nod 1126 矩阵快速幂 水
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...
- poj 1845 Sumdiv 约数和定理
Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...
- HDU 5478 Can you find it 随机化 数学
Can you find it Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- hdu2243之AC自动机+矩阵乘法
考研路茫茫——单词情结 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- POJ-2417-Discrete Logging(BSGS)
Given a prime P, 2 <= P < 2 31, an integer B, 2 <= B < P, and an integer N, 1 <= N &l ...
- 【SPOJ】Power Modulo Inverted(拓展BSGS)
[SPOJ]Power Modulo Inverted(拓展BSGS) 题面 洛谷 求最小的\(y\) 满足 \[k\equiv x^y(mod\ z)\] 题解 拓展\(BSGS\)模板题 #inc ...
随机推荐
- 如何使用libavfilter库给输入文件input.yuv添加视频滤镜?
一.视频滤镜初始化 本次代码实现的是给输入视频文件添加水平翻转滤镜,在视频滤镜初始化部分我们可以分为以下几步进行: 1.创建滤镜图结构 视频滤镜功能最核心的结构为滤镜图结构,即AVFilterGrap ...
- Codeforces Round #875 (Div. 2) A-D
比赛链接 A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; bool solve() { i ...
- 2023年ccpc大学生程序设计竞赛-crf
第一次参加这种大型线下程序设计比赛,心情自然是很激动,但比赛中并没有想象中那么顺利,甚至可以说有些惊险,比赛开始的时候,我们三人随便看看题,顺便等着跟榜,对于签到题我们自然是相信clk可以很快地独立完 ...
- IIS 应用程序池 PowerShell 脚本更改高级属性的方法
## IIS WebAdmin Module Import-Module WebAdministration $AppPool = "mqttService(8011)" $Sit ...
- python-gitlab 一个简单demo
背景 需要收集git仓库信息到数据库供前端展示 包括:仓库信息.仓库所有者.成员列表.提交信息.活跃情况等 需要定时启动.灵活触发 实现简介 使用gitlab v4 restful 接口 使用pyth ...
- 彻底弄懂js中this指向(包含js绑定、优先级、面试题详解)
为什么要使用this 在javascript中,this可谓是无处不在,它可以用来指向某些元素.对象,在合适的地方使用this,能让我们减少无用代码的编写 var user = { name: & ...
- 洛谷 P1122 最大子树和 题解
一道入门的树形DP. 首先我们对于数据进行有序化处理,这便于我们利用数据结构特点(可排序性)来发觉数据性质(有序.单调.子问题等等性质),以便于后续的转化.推理和处理.有序化可以"转化和创造 ...
- Sealos 国内集群正式上线,可一键运行 LLama2 中文版大模型!
2023 年 7 月 19 日,MetaAI 宣布开源旗下的 LLama2 大模型,Meta 首席科学家.图灵奖得主 Yann LeCun 在推特上表示 Meta 此举可能将改变大模型行业的竞争格局. ...
- 分享1-3年经验的Java面试
最近的温度真是一路的飙升啊,出个门实属不易,但是还是有所收获滴,趁着今天不忙,赶紧给大家分享一波Java面经,对于想去BAT大公司的面试者来说,我这里可能不太合适,深度或许不够,但是对于刚毕业或者有1 ...
- C++算法之旅、04 基础篇 | 第一章
常用代码模板1--基础算法 - AcWing ios::sync_with_stdio(false) 提高 cin 读取速度,副作用是不能使用 scanf 数据输入规模大于一百万建议用scanf 快速 ...