只写了和dp有关的。。博客 https://www.cnblogs.com/huyufeifei/p/10351068.html

关于状态的继承和转移

这题的状态转移要分开两步来做:

  1.继承之前状态的合法构造数量

  2.构造出该状态下特有的新构造数量

这类dp尽量由已知状态推出未知态(加法转移)来做。。。自己用减法转移都不知道边界怎么写。。

#include <cstdio>
#include <algorithm> const int N = , MO = ; int f[N][N][], sum[N]; inline void add(int &a, const int &b) {
a = (a + b) % MO;
return;
} int main() {
int n, k;
scanf("%d%d", &n, &k);
for(int j = ; j <= n; j++) {
f[][j][] = ;
}
for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
// f[i][j][0/1]继承前状态
for(int k = ; k < j && i + k <= n; k++) {
add(f[i + k][j][], f[i][j][]);
add(f[i + k][j][], f[i][j][]);
}
if(i + j <= n) {//构造出新的方案
add(f[i + j][j][], f[i][j][]);
add(f[i + j][j][], f[i][j][]);
}
}
} for(int i = ; i <= n; i++)printf("%d ", f[n][i][]);
long long ans = 0LL;
for(int i = ; i <= n; i++)
for(int j = ; (long long)j * i < k && j <= n; j++)
ans = (ans + f[n][i][] * f[n][j][] % MO) % MO;
ans = ans * % MO;
printf("%lld\n", ans);
}

更新:可以把dp[i][j]转换成前缀和来做,最后相减一下就变成了上面的那种dp[i][j]表示的状态

相比上一中感觉更加直观好写,即对于每种状态,枚举k个连续的1放在末尾,然后把对应的之前的状态加上去就可以了

#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll; const int N = ;
const ll P = 998244353LL; int n, siz;
ll f[N][N]; inline int min(int x, int y) {
return x > y ? y : x;
} int main() {
scanf("%d%d", &n, &siz); f[][] = 1LL;
for(int i = ; i <= n; i++)
for(int j = ; j <= i; j++)
for(int k = ; k <= j; k++)
f[i][j] = (f[i][j] + f[i - k][min(j, i - k)]) % P;
for(int i = n; i >= ; i--)
f[n][i] = (f[n][i] - f[n][i - ] % P + P) % P; //for(int i = 1; i <= n; i++)printf("%lld ", f[n][i]);
ll ans = 0LL;
for(int i = ; i <= n; i++)
for(int j = ; j * i < siz && j <= n; j++)
ans = (ans + f[n][i] * f[n][j] % P) % P;
ans = ans * % P;
printf("%lld\n", ans); }

线性dp——求01串最大连续个数不超过k的方案数,cf1027E 好题!的更多相关文章

  1. ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)

    1061: 从三个数中找出最大的数 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 124[Submit][Status][We ...

  2. 01背包方案数(变种题)Stone game--The Preliminary Contest for ICPC Asia Shanghai 2019

    题意:https://nanti.jisuanke.com/t/41420 给你n个石子的重量,要求满足(Sum<=2*sum<=Sum+min)的方案数,min是你手里的最小值. 思路: ...

  3. HDU-2087-剪花布条 【KMP】(求模式串的匹配个数——与已匹配的字串不交)

    题目链接:https://vjudge.net/contest/220679#problem/C 剪花布条                                               ...

  4. 组合数性质求K个数选取i*j个数分成j组的方案数

    分析:设方案数为ANS,C代表组合数: ANS=(C[K,I]*C[K-I,I][K-2*I,I]*...*C[K-(J-1)*I,I])/(J!); 也即: ANS=C[K,I*J]*(C[I*J, ...

  5. COGS 862. 二进制数01串【dp+经典二分+字符串】

    862. 二进制数01串 ★   输入文件:kimbits.in   输出文件:kimbits.out   简单对比 时间限制:1 s   内存限制:128 MB USACO/kimbits(译 by ...

  6. 【51nod-1396】还是01串

    给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s[0..k - 1]中的0的个数与子串s[k..n - 1]中1的个数相等. 注意: (1) 如果 ...

  7. Codeforces 474D Flowers (线性dp 找规律)

    D. Flowers time limit per test:1.5 seconds memory limit per test:256 megabytes We saw the little gam ...

  8. 51nod 1396 还是01串

    给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s[0..k - 1]中的0的个数与子串s[k..n - 1]中1的个数相等. 注意: (1) 如果 ...

  9. P1466 集合 Subset Sums(01背包求填充方案数)

    题目链接:https://www.luogu.org/problem/show?pid=1466 题目大意:对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合, ...

随机推荐

  1. CTF里的LSB

  2. 《转》python 9 字典,numpy

    http://www.cnblogs.com/BeginMan/p/3156960.html 一.映射类型 我理解中的映射类型是:键值对的关系,键(key)映射值(value),且它们是一对多的关系. ...

  3. C#枚举转化示例大全,数字或字符串转枚举

    本文重点举例说明C#枚举的用法,数字转化为枚举.枚举转化为数字及其枚举数值的判断,以下是具体的示例: 先举两个简单的例子,然后再详细的举例说明: 字符串转换成枚举:DayOfWeek week=(Da ...

  4. 转——调试寄存器 原理与使用:DR0-DR7

    下面介绍的知识性信息来自intel IA-32手册(可以在intel的开发手册或者官方网站查到),提示和补充来自学习调试器实现时的总结. 希望能给你带去有用的信息. (DRx对应任意的一个调试寄存器. ...

  5. 一些CSS3新技术

    前些日子在SmashingMagazine看到一篇关于CSS3新技术不错的文章,它详细介绍了CSS3的新特性和它的使用方法,它包括:浏览器专有属性.选择器(属性选择器.连字符.伪类.伪元素).RGBA ...

  6. 基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署

    前文已经说过,OPC基于微软的DCOM技术,所以开发OPC服务器我们要做的事情就是开发一个基于DCOM的EXE文件.一个代理/存根文件,然后就是写一个OPC客户端测试一下我们的服务器了.对于第一项工作 ...

  7. 纯css制作小三角

    在网站制作的过程中常涉及一些小图标,以前大部分会采用小图片.但有了css3后很多变得方便了,比如要在li列表的每行文字的前面加个小三角,可以这么写: <!DOCTYPE html> < ...

  8. 【学术篇】一些水的不行的dp

    最近做了几道非常水非常水的dp...... 之后刷的一些水dp也会写在这里...... 此篇题目难度不递增!!! Emmmm....... 1.luogu1043数字游戏 以前看过这个题几遍,没做这个 ...

  9. 清空资源管理器访问过FTP的账号、密码

    修改注册表,删除HKEY_CURRENT_USER\SOFTWARE\Microsoft\FTP\Accounts下相对应的项即可,即为xxx.xxx.xxx.xxx项. 如下图所示:

  10. dubbo重连机制会不会造成错误

    dubbo在调用服务不成功时,默认会重试2次. Dubbo的路由机制,会把超时的请求路由到其他机器上,而不是本机尝试,所以 dubbo的重试机器也能一定程度的保证服务的质量. 但是如果不合理的配置重试 ...