hdu_3562_B-number(记忆化搜索|数位DP)
2016-05-29 12:37
281 查看
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3652
题意:给你一个n,为比n小的能整除13并数字中有13的数有多少个
题解:记忆化搜索:记dp[i][j][k][l]为当前为第i位i+1位的数为j,余数为k,是否含有13的数的个数,然后搜索下去就得出答案了
#include<cstdio>
#include<cstring>
#define F(i,a,b) for(int i=a;i<=b;i++)
int dp[12][12][13][2],n,dig[12],len;
int dfs(int pos,int pre,int mod,bool have,bool inf){
if(!pos)return (have&&!mod);
if(!inf&&dp[pos][pre][mod][have]!=-1)return dp[pos][pre][mod][have];
int end=inf?dig[pos]:9,ans=0;
F(i,0,end)if(pre==1&&i==3)ans+=dfs(pos-1,i,(mod*10+i)%13,1,inf&&(i==dig[pos]));
else ans+=dfs(pos-1,i,(mod*10+i)%13,have,inf&&(i==dig[pos]));
if(!inf)dp[pos][pre][mod][have]=ans;
return ans;
}
int main(){
memset(dp,-1,sizeof(dp));
while(~scanf("%d",&n)){
for(len=0;n;)dig[++len]=n%10,n/=10;
printf("%d\n",dfs(len,0,0,0,1));
}
return 0;
}
题意:给你一个n,为比n小的能整除13并数字中有13的数有多少个
题解:记忆化搜索:记dp[i][j][k][l]为当前为第i位i+1位的数为j,余数为k,是否含有13的数的个数,然后搜索下去就得出答案了
#include<cstdio>
#include<cstring>
#define F(i,a,b) for(int i=a;i<=b;i++)
int dp[12][12][13][2],n,dig[12],len;
int dfs(int pos,int pre,int mod,bool have,bool inf){
if(!pos)return (have&&!mod);
if(!inf&&dp[pos][pre][mod][have]!=-1)return dp[pos][pre][mod][have];
int end=inf?dig[pos]:9,ans=0;
F(i,0,end)if(pre==1&&i==3)ans+=dfs(pos-1,i,(mod*10+i)%13,1,inf&&(i==dig[pos]));
else ans+=dfs(pos-1,i,(mod*10+i)%13,have,inf&&(i==dig[pos]));
if(!inf)dp[pos][pre][mod][have]=ans;
return ans;
}
int main(){
memset(dp,-1,sizeof(dp));
while(~scanf("%d",&n)){
for(len=0;n;)dig[++len]=n%10,n/=10;
printf("%d\n",dfs(len,0,0,0,1));
}
return 0;
}
相关文章推荐
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- 本人即将筹备败家日志,敬请期待!
- IE:使用搜索助手
- C++深度优先搜索的实现方法
- 基于文本的搜索
- php实现搜索一维数组元素并删除二维数组对应元素的方法
- 使用Sphinx对索引进行搜索
- asp 多关键词搜索的简单实现方法
- C#使用foreach语句搜索数组元素的方法
- WordPress中用于获取搜索表单的PHP函数使用解析
- JavaScript中数组的排序、乱序和搜索实现代码
- jquery ztree实现树的搜索功能
- C#编程实现Excel文档中搜索文本内容的方法及思路
- sqlserver中在指定数据库的所有表的所有列中搜索给定的值
- 可以用来搜索当前页面内容的js代码
- 全文搜索和替换
- javascript搜索自动提示功能的实现第1/3页
- iOS应用中UISearchDisplayController搜索效果的用法
- mysql 模糊搜索的方法介绍
- C#搜索文字在文件及文件夹中出现位置的方法