子序列子序列子序列...

题目链接:https://cometoj.com/contest/38/problem/C?problem_id=1542

数据范围:略。


题解:

神仙题,感觉这个题比$D$还难一些,$Orz$原题解。

http://static.eduzhixin.com/cometoj/solution/contest_38_1.pdf

代码:

#include <bits/stdc++.h>

#define N 5010 

#define M 21 

#define Pyd 1000000007 

using namespace std;

int a[N];

int dp[M][N];

int tmp[N];

int mod[M];

int n, m;

char *p1, *p2, buf[100000];

#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )

int rd() {
int x = 0, f = 1;
char c = nc();
while (c < 48) {
if (c == '-')
f = -1;
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x * f;
} int main() {
n = rd(), m = rd();
for (int i = 1; i <= n; i ++ ) {
a[i] = rd();
}
int k = 0;
while (m % (1 << k) == 0) k ++ ;
mod[0] = mod[1] = m;
for (int i = 2; i <= k; i ++ ) mod[i] = mod[i - 1] / 2;
dp[0][0] = 1;
for (int i = 1; i <= n; i ++ ) {
for (int j = 0; j < mod[k]; j ++ ) tmp[(j + a[i]) % mod[k]] = dp[k][j];
for (int j = 0; j < mod[k]; j ++ ) {
dp[k][j] += tmp[j];
if (dp[k][j] >= Pyd) dp[k][j] -= Pyd;
}
for (int p = k - 1; p > 0; p -- ) {
for (int j = 0; j < mod[p]; j ++ ) {
int nj = (j + a[i]) % mod[p + 1];
dp[p + 1][nj] += dp[p][j];
if (dp[p + 1][nj] >= Pyd) dp[p + 1][nj] -= Pyd;
}
}
dp[1][a[i]] ++ ;
if (dp[1][a[i]] >= Pyd) dp[1][a[i]] -= Pyd;
}
int ans = 0;
for (int i = 1; i <= k; i ++ ) {
ans += dp[i][0];
if (ans >= Pyd) ans -= Pyd;
} cout << ans << endl ;
return 0;
}

[Cometoj#3 C]子序列子序列子序列..._动态规划_数论的更多相关文章

  1. [bzoj4282]慎二的随机数列_动态规划_贪心

    慎二的随机数列 bzoj-4282 题目大意:一个序列,序列上有一些数是给定的,而有一些位置上的数可以任意选择.问最长上升子序列. 注释:$1\le n\le 10^5$. 想法:结论:逢N必选.N是 ...

  2. [bzoj1855][Scoi2010]股票交易_动态规划_单调队列

    股票交易 bzoj-1855 Scoi-2010 题目大意:说不明白题意系列++...题目链接 注释:略. 想法:这个题还是挺难的. 动态规划没跑了 状态:dp[i][j]表示第i天手里有j个股票的最 ...

  3. [bzoj3622]已经没有什么好害怕的了_动态规划_容斥原理

    bzoj-3622 已经没有什么好害怕的了 题目大意: 数据范围:$1\le n \le 2000$ , $0\le k\le n$. 想法: 首先,不难求出药片比糖果小的组数. 紧接着,我开始的想法 ...

  4. [bzoj1879][Sdoi2009]Bill的挑战_动态规划_状压dp

    Bill的挑战 bzoj-1879 Sdoi-2009 题目大意: 注释:$1\le t \le 5$,$1\le m \le 15$,$1\le length \le 50$. 想法: 又是一个看数 ...

  5. [bzoj1047][HAOI2007]理想的正方形_动态规划_单调队列

    理想的正方形 bzoj-1047 HAOI-2007 题目大意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 注释:$2\le a, ...

  6. [luogu1156]垃圾陷阱_动态规划_背包dp

    垃圾陷阱 luogu-1156 题目大意:Holsteins在距离地面D英尺的地方,FJ间隔时间ti会往下扔第i个垃圾.Holsteins对待每一个垃圾都会选择吃掉或者垫高.Holsteins有10个 ...

  7. [bzoj1195][HNOI2006]最短母串_动态规划_状压dp

    最短母串 bzoj-1195 HNOI-2006 题目大意:给一个包含n个字符串的字符集,求一个字典序最小的字符串使得字符集中所有的串都是该串的子串. 注释:$1\le n\le 12$,$1\le ...

  8. [bzoj1708][Usaco2007 Oct]Money奶牛的硬币_动态规划_背包dp

    Money奶牛的硬币 bzoj-1708 Usaco-2007 Oct 题目大意:在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统的货币 ...

  9. [bzoj1606][Usaco2008 Dec]Hay For Sale 购买干草_动态规划_背包dp

    Hay For Sale 购买干草 bzoj-1606 Usaco-2008 Dec 题目大意:约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单 ...

随机推荐

  1. 参数类型 (实体类层)eneity或pojo 常用参数类型

    import java.util.Date;@TableName("p_user_base_info") public class UserBaseInfo extends Mod ...

  2. 异步时钟FIFO(一)

    FIFO一般用于通过两个不同时钟域的数据传输.一个水池有进和出两个通道,由于进出口水流不一致所以需要水池加以缓冲.堆栈也是相当于水池的作用.如果输入端不是连续的数据流,可以通过堆栈来调节使数据以稳定的 ...

  3. 3.5寸1.44M软盘结构

    结构: 划分: 簇:磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位.在磁盘上,DOS操作系统是以“簇”为单位为文件分配磁盘空间的.硬盘的簇通常为多个扇区,与磁盘的种类.DOS 版本及硬盘分区的大小 ...

  4. 多项式fft、ntt、fwt 总结

    做了四五天的专题,但是并没有刷下多少题.可能一开始就对多项式这块十分困扰,很多细节理解不深. 最简单的形式就是直接两个多项式相乘,也就是多项式卷积,式子是$N^2$的.多项式算法的过程就是把卷积做一种 ...

  5. linux后台运行nodejs项目

    1.安装pm2,这里默认你已经安装了node.js和npm npm install pm2 -g 2.创建软连接 1)全局path路径 echo $PATH 2)pm2安装路径 安装pm2时,可看到p ...

  6. Quickstart: Create and publish a package using Visual Studio (.NET Framework, Windows)

    https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package-using-visual-studio-n ...

  7. PHP魔术方法和魔法变量详解

    一.魔术常量 __LINE__ 文件中的当前行号.__FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名. 自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对 ...

  8. Java同步数据结构之ConcurrentLinkedDeque

    前言 由于LinkedBlockingDeque作为双端队列的实现,采用了单锁的保守策略使其不利于多线程并发情况下的使用,故ConcurrentLinkedDeque应运而生,它是一种基于链表的无界的 ...

  9. Tomcat发布项目

    WEB项目的目录结构 演示动态项目的创建 把项目打包成war包: 进入这个项目中,使用命令: jar cvf aaa.war * 发布动态项目的三种方式: 1. 直接复制项目到webapps下 2. ...

  10. Visual Studio2013的C语言编译器对C99标准的支持情况

    Visual Studio2013终于开始比较良好地支持C99特性了.在此之前,如果用C语言写代码的话,变量名都需要放到函数体的前面部分,代码写起来十分别扭. 而Visual Studio2013中的 ...