hdu 3652 数位dp
来源:互联网 发布:mac搜狗五笔不能打字 编辑:程序博客网 时间:2024/05/14 18:21
直接套的模板
#include<bitset>#include<map>#include<vector>#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<stack>#include<queue>#include<set>#define inf 0x3f3f3f3f#define mem(a,x) memset(a,x,sizeof(a))using namespace std;typedef long long ll;typedef pair<int,int> pii;inline int in(){ int res=0;char c; while((c=getchar())<'0' || c>'9'); while(c>='0' && c<='9')res=res*10+c-'0',c=getchar(); return res;}const int N=100010;int bit[20];int dp[22][22][3];int dfs(int pos,int mod,int lim,int flag){ if(pos==0) return mod==0 && flag==2; if(!lim && dp[pos][mod][flag]!=-1) return dp[pos][mod][flag]; int mx=lim? bit[pos] : 9; int cnt=0; for(int i=0;i<=mx;i++) { int t=flag; if(flag==1 && i==3) flag=2; else if(flag==1 && i!=1) flag=0; else if(flag==0 && i==1) flag=1; int tmp=(mod*10+i)%13; cnt += dfs(pos-1,tmp,lim && i==mx,flag); flag=t; } if(!lim) return dp[pos][mod][flag]=cnt; return cnt;}int solve(int n){ mem(bit,0); mem(dp,-1); int tmp=n; int cnt=1; while(tmp) { bit[cnt++]=tmp%10; tmp/=10; } return dfs(cnt-1,0,1,0);}int main(){ int n; while(~scanf("%d",&n)) { printf("%d\n",solve(n)); } return 0;}
0 0
- HDU 3652 数位DP
- hdu 3652 数位DP
- hdu 3652 -数位dp
- 【数位DP】 【HDU 3652】
- hdu 3652 数位dp
- 数位DP HDU-3652
- HDU 3652 数位DP
- HDU 3652 数位DP
- hdu 3652(数位dp)
- HDU 3652 数位DP
- hdu 3652数位dp
- hdu 3652 数位dp
- HDU 3652 数位DP
- HDU 3652 数位DP
- HDU 3652 数位DP
- hdu 3652 数位dp
- HDU-3652-数位dp
- HDU 3652 数位DP
- 带环链表
- java的一些语法基础(二)
- TestLink和Mantis的集成
- lintcode-将整数A转换为B-181
- DOS命令
- hdu 3652 数位dp
- 矩阵基础算法实现
- HDU 4828 Catalan+逆元法
- 小火箭升空动画大全解
- DTD学习总结
- KMP next[]数组
- 第一次实训成果报告
- Ios中的普通屏幕和retina屏幕的了解
- 现代新诗选