摘要:预处理sum数组,sum[i]表示1-m中有i个4或7的数有多少个,这个数位dp很好写然后就是枚举第七个数含有的4,7数目,dfs剩下的六个数= 1 #include 2 #include 3 #include 4 using namespace std; 5 #define LL long lon...
阅读全文
摘要:灵活!首先,需要从后向前dfs,因为后缀。然后,不用再加limit了,但是在特殊的位置要知道该位加的是0还是1。这样的话,记住后缀mod k的值,就很好dfs了。dfs(pod,preMOD,flag) 1 #include 2 #include 3 int dp[1005][105][2],shi...
阅读全文
摘要:因为这道题目开始学的数位dp,在bestcode那道数位dp(http://www.cnblogs.com/xiao-xin/articles/4168112.html)解决之后,这道题目也终于解决啦!求一个区间内满足:1.每位都没有7 2.该数每位和不是7倍数 3.该数不是7倍数,这样的数的平方和...
阅读全文
摘要:学过数位dp,第一次用那个模板用自己的思路敲出来的dfs代码2333还尼玛用了结构体瞬间觉得高大上逼格升升升===吃颗药冷静一下,结构体返回的是:1.pos及其下面的符合已定sum的数目2.pos及其下面的符合已定sum的数的和然后开两个数组保存一下记忆化: 1 #include 2 #includ...
阅读全文
摘要:和五类似,此题枚举的是平衡位置,然后依旧数位dp只要从头dfs到尾权重为0即符合。注意0每一次都被重复计算了。 1 #include 2 #include 3 long long dp[20][1800][20]; 4 int num[20]; 5 long long dfs(int pos,int...
阅读全文
摘要:所有位和最大为81,枚举x为1-81即和为x且该数能被x整除。。卡内存过=== 1 #include 2 #include 3 int num[15]; 4 int dp[11][82][82][82]; 5 int dfs(int pos,int sum,int lsum,int mod,int ...
阅读全文
摘要:相比第一个数位dp,多加了一维mod,来判定前面值对13的取模,知道最后返回结果要两个都成立。 1 #include 2 #include 3 int num[15]; 4 int dp[15][15][15][2]; 5 int dfs(int pos,int pre,int mod,int ha...
阅读全文
摘要:dfs(pos,sum,nlcm,flag)pos表示到第几位;sum表示前几位表示的数,因为太大可以mod所有数的最小公倍数2520;nlcm表示前几位的最小公倍数,最大只有2520,但还是太多需要离散化;flag表示有没有上限。dp[pos][sum][nlcm]; 1 #include 2 #...
阅读全文
摘要:递推的写法,进一步理解了数位dp,为了防重复计算总是比当前上限小的。 1 #include 2 #include 3 int dp[10][5],num[10]; 4 int cal(int x) 5 { 6 int tmp=x,i,cnt,ans,flag; 7 memset(nu...
阅读全文
摘要:首先递推公式:dp[i][0] = dp[i-1][0] * 10 - dp[i-1][1];// 不含49dp[i][1] = dp[i-1][0];// 不含49以9开头dp[i][2] = dp[i-1][2] * 10 + dp[i-1][1];// 含49然后从高位往低位递推,ans+=d...
阅读全文