HDU 3652 B-number
2016-03-16 08:56
330 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3652
数位DP专题:/article/8966394.html
题意:在n的范围内,求含"13"且能被13整除的数的个数。
思路:数位dp。对于判断是否整除,可以利用同余来逐位计算。
数位DP专题:/article/8966394.html
题意:在n的范围内,求含"13"且能被13整除的数的个数。
思路:数位dp。对于判断是否整除,可以利用同余来逐位计算。
#include <cstdio> #include <cmath> #include <cstring> #include <string> #include <cstdlib> #include <iostream> #include <algorithm> #include <stack> #include <map> #include <set> #include <vector> #include <sstream> #include <queue> #include <utility> using namespace std; #define rep(i,j,k) for (int i=j;i<=k;i++) #define Rrep(i,j,k) for (int i=j;i>=k;i--) #define Clean(x,y) memset(x,y,sizeof(x)) #define LL long long #define ULL unsigned long long #define inf 0x7fffffff #define mod %100000007 int dp[12][13][3]; // dp[i][yu][id] id = 0:不以1结尾 id = 1:以1结尾 id = 2:含"13" int digit[12]; int dfs( int k , int yu , int id , bool flag ) { if ( k == 0 ) return ( yu == 0 && id == 2 ); //可以被13整除且含有13就计数一次 if ( !flag && dp[k][yu][id]!=-1 ) return dp[k][yu][id]; //是否之前求过这个子问题 int ed = flag?digit[k]:9; int ans = 0; rep(i,0,ed) { int next_yu = (yu*10 + i)%13; int next_id = id; if ( id == 0 && i == 1 ) next_id = 1; if ( id == 1 && i != 1 ) next_id = 0; if ( id == 1 && i == 3 ) next_id = 2; ans+=dfs( k-1 , next_yu , next_id , flag && i == ed ); } if ( !flag ) dp[k][yu][id] = ans; return ans; } int cal(int x) { int len = 0; while( x ) { digit[++len] = x % 10; x /= 10; } return dfs( len , 0 , 0 , 1 ); } int main() { Clean(dp,-1); int x; while(cin>>x) { printf("%d\n",cal(x)); } return 0; }
相关文章推荐
- Android 蓝牙4.0详细
- GitHub使用入门
- C++卷积神经网络实例:tiny_cnn代码详解(7)——fully_connected_layer层结构类分析
- jdk内置工具使用
- Android View 如何测量
- Java实现获取客户端真实IP方法小结
- 利润中心的设置与组织架构、绩效考核、财务核算
- Java经典设计模式之五大创建型模式(附实例和详解)
- 程序员上班路上案例解说-工厂模式
- 设计模式之策略模式strategyPattern
- nginx实时生成缩略图存储到硬盘上
- X264编码h264
- iOS开发笔记13:顶部标签式导航栏及下拉分类菜单
- 第二周作业(续)
- XML解析总结(SAX、Pull、Dom三种方式)
- 160.View the Exhibit and examine the structure of ORDERS and CUSTOMERS tables.
- July收集荷兰国旗问题之三路partition
- HDOJ 1799 循环多少次? (排列组合+打表)
- Android 6.0(API级别23)包括各种系统变化和API的行为变化
- Spring中怎样通过编程的方式通过stomp广播消息