首页 > TAG信息列表 > P2657

题解 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

P2657 [SCOI2009]windy数 题解

CSDN同步 原题链接 简要题意: 一个 相邻两个数字差的绝对值都 \(\geq 2\) 且不含前导零 的数 被称为 “windy数”。问从 \(a\) 到 \(b\) 的 “windy数”的个数。 首先,我们考虑 \(1\) ~ \(n\) 的 “windy数” 的个数怎么求。 用 \(f_{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

洛谷P2657 windy数

传送 裸的数位dp 看这个题面,要求相邻两个数字之差至少为2,所以我们记录当前填的数的最后一位 同时要考虑毒瘤的前导0。如果填的数前面都是0,则这一位填0是合法的。 emmm具体的看代码叭 #include<iostream>#include<queue>#include<cstdio>#include<algorithm>#include<cstring>#inc

P2657 [SCOI2009]windy数

P2657 [SCOI2009]windy数 题解 数位DP板子题 f[ i ][ j ] 表示长度为 i 的数字,最高温填的数字是  j  的时候,windy数的个数 f[ i ][ j ] = Σ f[ i ][ k ] ( abs(k-j)>=2 )   代码 #include<bits/stdc++.h>using namespace std;inline int read(){ int ans=0; char last

Luogu P2657 [SCOI2009]windy数

传送门 终于明白数位DP是什么了 虽然说是dp,实际上是记忆化搜索 看这道题的题面: 不含前导零,且相邻两个数字之差至少为2的正整数被称为windy数。 求:在A和B之间,包括A和B,总共有多少个windy数? 这道题中给出了几个限定条件。 其中,前导零、数字上限(A,B)是数位dp的题目中比较常见的。