首页 > TAG信息列表 > Windy

数位 dp,但是做题笔记

这玩意儿还要学自己推不出来的 SX 是屑。 数位 dp,顾名思义,是根据数位做 dp,每个数位每个数位转移,炒个例子 windy 数。 求 \([l, r]\),我们改成求 \(1\sim r\) 与 \(1\sim (l - 1)\) 最后二者相减。那么我们的问题就成了求 \(1\sim k\) 的 windy 数。运用 dp,数位 dp 每次从最高位往

1026 [SCOI2009]生日快乐 dfs

链接:https://ac.nowcoder.com/acm/contest/23156/1026来源:牛客网 题目描述 windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕。现在包括windy ,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。 wind

数位DP

数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。 数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位......数的每一位就是数位啦! 之所以要引入数位的概念完全就是为了dp。数位dp的实质就

【数位DP】Windy数

【题目链接】 Windy数 【题目描述】 不含前导零且相邻两个数字之差至少为 2 的正整数被称为 windy 数。在 a 和 b 之间,包括 a 和 b ,总共有多少个 windy 数? 【输入】 输入只有一行两个整数,分别表示 a 和 b。1≤a,b≤2 x 109。 【输出】 输出一行一个整数表示答案。

数位 dp

数位DP 前导零 是否压位 例题: 不要62 题面: 求 a 到 b 中不含连续的 62 并且不含 4 的数。 做法: 记 \(g(x)\) 为 0 到 x 之间的 windy 数。 求 \(g(b)-g(a-1)\) 深搜,记长度 x ,上一个数 last,是否压界 k。 枚举此位放几,排除不合法情况,累计答案。 #include<bits/stdc++.h> usin

2657 windy数

2657 windy数 啊,连了一天的动态规划,快给我整吐了,不过状压DP还没学,效率太低了,明天再用一天学完DP加上图论数据结构,然后拿出两整天的时间来学数论,如果济南夏令营还去的话,回来就备考初赛 数位dp的题,一般会给你l和r,求从l到r有多少个数满足某个性质 我们用f(i)表示前i位windy数的

数位DP--P2657--Windy数 java实现

什么是数位DP 数位 DP 问题往往都是这样的题型,给定一个闭区间 [L,R],让你求这个区间中满足 某种条件 的数的总数。 (来自 OI-WIKI ) 按照一般的方法,我们会遍历区间[L,R],对每个数字进行判断,是否符合题目要求. 但是这类题目的区间范围往往都比较大,单纯地遍历每一个数字,会超时.

计蒜客 T2657 windy数

题目链接:计蒜客 T2657 windy数 题目大意: 题解: 数位\(dp\)题。 \(dp[pos][pre]\)表示位数为\(pos\)且第\(pos + 1\)位为\(pre\)的满足条件的数的个数,若第\(pos+1\)位为前导\(0\),则\(pre\)为\(-1\)。 从高位开始记忆化搜索。 #include <cmath> #include <iostream> using namespace

BZOJ1026: [SCOI2009]windy数(数位dp)

题意 题目链接   Sol 很zz的数位dp $f[i][j]$表示第$i$位,前一位是$j$的方案数 转移的时候枚举一下是否相同即可 注意当lim达到上界的时候是不能记忆化的! /* */ #include<cstdio> #include<map> #include<cmath> #include<algorithm> #define int long long using namespace s

[BZOJ]1026[SCOI2009]windy数

题目链接:[SCOI2009]windy数  题意: 求[l,r]之间的有多少个数满足:不包含前导0,且相邻两位数字差大于等于2。   题解:   第一次不看题解一遍通过数位dp祭(虽然以前做过这道题,但是已经忘了)。 数位dp一直是恶心我的难点,这道题刚好是一道很简单的的数位dp,于是想尝试一下。 数位dp肯定要

1587: 【例 3】Windy 数

1587: 【例 3】Windy 数 时间限制: 1000 ms 内存限制: 524288 KB 提交数: 596 通过数: 366 【题目描述】 原题来自:SCOI 2009 Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 Windy 数。 Windy 想知道,在 A 和 B 之间,包括 A 和 B,总共有

windy数 (数位dp)

windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入格式   包含两个整数,A B。 输出格式   一个整数 数据范围和提示 【数据规模和约定】 100%的数据,满足 1 <= A <= B <= 20000

[SCOI2009] windy 数 (数位dp)

题目 算法 应该是一道很经典的数位dp题 我们设dp[i][j]是填到第i位此时第i位的数是j的方案数 然后进行转移(代码注释) 代码 #include<iostream> #include<cstdio> #include<cmath> #define ll long long using namespace std; ll p,q,dp[15][15]; ll init(){//进行初始化 for(l

Windy 数

题目链接:https://loj.ac/problem/10165#submit_code 思路:数位dp,记录是否为前导0,已经是否为上边界和前一个数的值即可,如果前面已经有数了,那要和前一个数之差的绝对值要大于等于2才行。具体实现请看代码。 #include<bits/stdc++.h> using namespace std; typedef long long ll; int

luoguP2657 [SCOI2009] windy 数 数位dp

基本上把数位dp那一套给忘了,今天重学一遍.    感觉采用递推的方式还是蛮方便的,然后要注意几个细节: 1. 通常算 f(x+1)=calc(1,x),这样更方便算一些.   2. 每种小于最大长度的所有结果都要累加.   3. 很多时候不要忘记 0 的贡献. 4. 要特判前缀合不合法.  code:  #include <

题解 P2657 【[SCOI2009] windy 数】

数位 dp。 // 数位 dp 其实是爆搜加记忆化 #include<iostream> #include<cstring> #include<cmath> using namespace std; const int N=15; //数据范围是 10^n 就可以开 n 那么大的数组。 int dp[N][2][2][N],a[N]; //dp 数组用来记忆化,a 数组用来数位分离 int dfs(int loc,bool l

粉刷匠(字符串的dp问题)

windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。  windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。  如果windy只能粉刷 T 次,他最多能正确粉刷多少格子?  一个格子如果未被粉刷或者被粉

P2657 [SCOI2009]windy数 题解

CSDN同步 原题链接 简要题意: 一个 相邻两个数字差的绝对值都 \(\geq 2\) 且不含前导零 的数 被称为 “windy数”。问从 \(a\) 到 \(b\) 的 “windy数”的个数。 首先,我们考虑 \(1\) ~ \(n\) 的 “windy数” 的个数怎么求。 用 \(f_{i,j}\) 表示有 \(i\) 位,最高位为 \(j\) 的方案数

[每日一题]:Windy 数

题目: 考察点: 数位 DP 数位DP 的板子戳这里: https://www.cnblogs.com/prjruckyone/category/1754376.html 侃侃: 这道题与模板只有一点点稍微的不同,还需要判段一下 前导 0 因为我们是从高位开始枚举的,枚举到最后可能会出现这样的情况 0004,显然这个数不是 Windy 数,但是我

机器学习 决策树

1. 决策树 决策树是一种分类算法,它像是一个倒着的树,遵循if—then原则来对样本进行分类,如下图: 这是一个简单的决策树模型,它通过样本数据的特征来一点一点判断,最终将样本归到正确的分类中。最上面的"拥有房产"这个节点称为根节点,中间诸如"已婚"、"年收入"等节点称为内部节点,

Day5 - D - Conscription POJ - 3723

Windy has a country, and he wants to build an army to protect his country. He has picked up N girls and M boys and wants to collect them to be his soldiers. To collect a soldier without any privilege, he must pay 10000 RMB. There are some relationships b

Windy 数

https://loj.ac/problem/10165 题目描述   定义不含前导\(0\)且相邻两个数字之差至少为\(2\)的正整数称为\(windy\)数,求区间\([A,B]\)内的\(windy\)数的个数。 思路   这里我们还是先把数位\(dp\)的记搜莫不套上去,不过注意这里的前导\(0\)会对答案产生影响,一串前导\(0\)依旧满

windy数

windy数 参考: 题解 P2657 【[SCOI2009]windy数 windy数 数位dp练习题——只要学了数位dp就异常简单的题 用数位dp解决这个问题。 数位 DP 问题往往都是这样的题型,给定一个闭区间[l,r],让你求这个区间中满足 某种条件 的数的总数。 对于dp[i][j]: 表示具有i位数,且最高位为数字j的,

P2657 [SCOI2009]windy数

思路清看代码 #include <bits/stdc++.h> #define int long long #define rep(x,y,z) for(int x = y ; x <= z ; x ++) using namespace std ; int f[20][20] , a[20] ; int calc(int x) { int len = 0 ; while(x>0) {//江数位拆开以便于处理 a[++len] = x % 10

$SCOI2009\ $windy数 数位$dp$

\(Sol\) 数位\(dp\)常规套路题. \(dp[i][j]\)表示从低位到高位填到第\(i\)位且第\(i\)位的数字为\(j\)的方案数.答案就是\(sol(r)-sol(l+1).\)这里\(dp\)的过程十分简单,一般出错的也就是计算小于等于\(x\)的\(windy\)数,所以这里简述一下这个流程: 首先是预处理出\(x\)的位数\(ct