数位DP
Love_xyh
这个作者很懒,什么都没留下…
展开
-
CF628D Magic Numbers
对于数位dp高精度的处理方式,同此题。#include <bits/stdc++.h>#define int long longusing namespace std;const int N=2e3+5,MOD=1e9+7;int m,d,len,ans;int a[N],dp[N][N];char l[N],r[N];int dfs(int x,int sum,int lead,int limit){ if (x==len+1) { if (!sum &&原创 2020-09-07 12:52:31 · 123 阅读 · 0 评论 -
CF55D Beautiful numbers
我们期望记录这样一个数组dp[x][sum][lcm]:x表示当前处理到第几位,sum表示 x位之前的数,lcm表示 x位之前的数的每一位数的最小公倍数。我们很渴望,sum可以边累加边对完整的lcm取模,这样就可以用2520来存储了。但是,我们不知道完整的数的lcm是多少呀。所以现在数组只能开为:dp[19][9e18][2520]。需要后面的优化。lcm(1,2,3,4,5,6,7,8,9)=2520我们发现,不论是出现哪些数组组合,它们的lcm一定是2520的一个约数。所以,如果要使得sum(原创 2020-09-07 12:41:37 · 146 阅读 · 0 评论 -
洛谷 P3413 SAC#1 - 萌数
题意:求范围内符合:至少有一个回文子串的数的数量。如果正着求,要考虑容斥,很麻烦,所以我们就求:“全部数量” 减去 “一个回文子串都没有的数的数量”。如何做到一个回文子串都没有?str[i]!=str[i-2] str[i]!=str[i-1]即可。一个回文子串都没有的数的数量明显是:solve(m)-solve(n-1)。但是,我们需要求n-1? 高精度吗?其实只要:solve(m)-solve(n)。然后判断再判断一下n就好了 。#include <bits/stdc++.h&g原创 2020-08-05 20:53:05 · 183 阅读 · 0 评论 -
洛谷 P4950 完美数字
之前的博客中提到过CF1073E,现在重新回顾一下这种类型的题目。均是求L-R的区间中符合类型的数的和,而不是求符合类型的数的数量。P4950 完美数字#include <bits/stdc++.h>#define int long longusing namespace std;const int N=10;int T,n,m,x,now,p1,p2;int a[N],...原创 2020-02-25 13:44:38 · 354 阅读 · 0 评论 -
数位DP
新学数位DP,从目前学到的角度来看,数位DP主要有种类型:1.让你求l—r区间内符合要求的数的个数2.让你求l—r区间内符合要求的数的 “数值的和” 或是 “所有位上数字加起来的和”其实对于后一种类型来说,只要再记忆化搜索过程中多返回某些需要记忆的值即可。对于类型一,就不过多介绍了,下面推荐几道类型二的好题。CF1073E Segment Sum#include <bits/st...原创 2019-10-02 14:46:01 · 100 阅读 · 0 评论