HDU-3652 B-number(数位DP+记忆化搜索)
来源:互联网 发布:floyd算法流程 编辑:程序博客网 时间:2024/05/18 19:22
F:
题意:找出1~n范围内含有13并且能被13整除的数字的个数
思路:使用记忆化深搜来记录状态,配合数位DP来解决
代码如下:
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int bit[15]; int dp[15][15][3]; //dp[i][j][k] //i:数位 //j:余数 //k:3种操作状况,0:末尾不是1,1:末尾是1,2:含有13 int dfs(int pos,int mod,int have,int lim)//lim记录上限 { int num,i,ans,mod_x,have_x; if(pos<=0) return mod == 0 && have == 2; if(!lim && dp[pos][mod][have] != -1)//没有上限并且已被访问过 return dp[pos][mod][have]; num = lim?bit[pos]:9;//假设该位是2,下一位是3,如果现在算到该位为1,那么下一位是能取到9的,如果该位为2,下一位只能取到3 ans = 0; for(i = 0; i<=num; i++) { mod_x = (mod*10+i)%13;//看是否能整除13,而且由于是从原来数字最高位开始算,细心的同学可以发现,事实上这个过程就是一个除法过程 have_x = have; if(have == 0 && i == 1)//末尾不是1,现在加入的是1 have_x = 1;//标记为末尾是1 if(have == 1 && i != 1)//末尾是1,现在加入的不是1 have_x = 0;//标记为末尾不是1 if(have == 1 && i == 3)//末尾是1,现在加入的是3 have_x = 2;//标记为含有13 ans+=dfs(pos-1,mod_x,have_x,lim&&i==num);//lim&&i==num,在最开始,取出的num是最高位,所以如果i比num小,那么i的下一位都可以到达9,而i==num了,最大能到达的就只有,bit[pos-1] } if(!lim) dp[pos][mod][have] = ans; return ans; } int main() { int n,len; while(~scanf("%d",&n)) { memset(bit,0,sizeof(bit)); memset(dp,-1,sizeof(dp)); len = 0; while(n) { bit[++len] = n%10; n/=10; } printf("%d\n",dfs(len,0,0,1)); } return 0; }
0 0
- HDU 3652 B-number(数位DP+记忆化搜索)
- HDU 3652 B-number(数位dp&记忆化搜索)
- HDU-3652 B-number(数位DP+记忆化搜索)
- HDU 3652 B-number 数位dp+记忆化搜索
- hdu 3652 B-number (数位dp+记忆化)
- B-number(数位DP+DFS记忆化搜索)
- hdu3709Balanced Number【数位dp记忆化搜索】
- hdu_3562_B-number(记忆化搜索|数位DP)
- hdu 5179 数位dp+记忆化搜索
- hdu 5898 数位dp,记忆化搜索
- HDU 3709 ZJU 3416 Balanced Number 数位dp 记忆搜索
- hdu 3652(数位dp 记忆化搜索方法)
- HDU 3652 记忆化搜索加 多维数位dp 模板
- HDU 3652--B-number(数位dp)
- HDU 3652 B-number(数位DP)
- [HDU 3652]B-number[数位DP]
- hdu 3652 B-number (数位DP)
- hdu 3652 B-number(数位DP)
- DIY智能插座(六) -- 利用网易云信实现外网控制
- CSDN代码仓库的使用
- 跑步应该怎么跑?怎么跑最科学?
- java中String类源代码学习
- 跑步的正确姿势
- HDU-3652 B-number(数位DP+记忆化搜索)
- android中getLocationInWindow 和 getLocationOnScreen的区别
- device not managed
- 光栅化
- leetcode 191. number of 1 bits
- 初跑者如何制定跑步计划?
- hdu1251 统计难题 字典树
- leetcode 202. happy number
- leetcode205. isomorphic strings