HDU3652 B-number
来源:互联网 发布:select标签默认选中js 编辑:程序博客网 时间:2024/05/17 02:18
数位dp
#include <map>#include <set>#include <stack>#include <queue>#include <cmath>#include <ctime>#include <vector>#include <cstdio>#include <cctype>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;#define INF 0x3f3f3f3f#define inf -0x3f3f3f3f#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mem0(a) memset(a,0,sizeof(a))#define mem1(a) memset(a,-1,sizeof(a))#define mem(a, b) memset(a, b, sizeof(a))typedef long long ll;int bit[100];int dp[15][15][3];/*dp[i][j][k]i表示第几位,j表示余数为几,k等于0表示不存在13,k等于1表示末尾为1,k等于2表示存在1,3*/ int dfs(int p,int mod,int have,int lim){ //lim记录上限 int have_x,mod_x; if(p<=0) return (have==2)&&(mod==0); if(!lim&&dp[p][mod][have]!=-1) //记忆化搜素 return dp[p][mod][have]; int num= lim?bit[p]: 9; //判断这个数最大为几 int ans=0; for(int i=0;i<=num;i++){ int mod_x=(mod*10+i)%13; have_x=have; if(have==0&&i==1) have_x=1; if(have==1&&i!=1) have_x=0; if(have==1&&i==3) have_x=2; ans+=dfs(p-1,mod_x,have_x,lim&&(i==num)); } if(!lim) dp[p][mod][have]=ans; return ans;}int main(){ int n; while(scanf("%d",&n)!=EOF){ mem1(dp); mem0(bit); int len=0; while(n){ bit[++len]=n%10; n/=10; } bit[len+1]=0; cout<<dfs(len,0,0,1)<<endl; }}
0 0
- hdu3652 B-number
- HDU3652 B-number
- hdu3652:B-number
- HDU3652 B-number
- HDU3652.B-number
- 【HDU3652】【B-number】
- HDU3652 B-number
- HDU3652[B-number]
- 【HDU3652】B-number
- HDU3652 B-number
- 【数位DP】 hdu3652 B-number
- 【hdu3652】【数位DP】B-number
- 【数位DP】B-number HDU3652
- HDU3652:B-number(数位DP)
- hdu3652 B-number (数位DP)
- HDU3652 B-number 数位DP
- hdu3652 B-number 数位dp
- [HDU3652]B-number && 数位DP
- rop 入门(五)
- leetcode longestCommonPrefix
- curl 命令使用
- Objective-C中的NSValue的详解
- eclipse快捷键-超实用
- HDU3652 B-number
- Android应用经典主界面框架之二:仿网易新闻客户端、CSDN 客户端 (Fragment ViewPager)
- 欢迎使用CSDN-markdown编辑器
- Java基础——集合框架(二)
- SWIFT
- Android 仿余额宝数字动画实现
- 1380 没有上司的舞会
- C# SaveFileDialog的用法
- 常用数据结构STL实现(优先队列、队列、栈)