数位DP
来源:互联网 发布:水电算量软件 编辑:程序博客网 时间:2024/05/16 09:11
找个机会复习一下。。重新写一边题解。。
HDU 2089
#include <cstdio>#define FOR(i,j,k) for(i=j;i<=k;i++)int dp[16][10];void init() { int i, j, k; dp[0][0] = 1; FOR(i,1,14) FOR(j,0,9) { dp[i][j]=0; if (j != 4) FOR(k,0,9) if (j != 6 && k != 2) dp[i][j] += dp[i - 1][k]; }}int calc(int n) { static int digit[16]; int l = 0, ans = 0, i, j; while (n) { digit[++l] = n % 10; n /= 10; } digit[l + 1] = 0; for (i = l; i; --i) { for (j = 0; j < digit[i]; ++j) if (j != 4 && !(digit[i+1]==6 && j == 2)) ans += dp[i][j]; if (digit[i] == 4 || (digit[i] == 2 && digit[i + 1] == 6)) break; } return ans;}int main() { int i, j; init(); while(~scanf("%d%d", &i, &j)) { if(i+j==0)break; printf("%d\n", calc(j+1)-calc(i)); } return 0;}
HDU 3555
#include <cstdio>#define FOR(i,j,k) for(i=j;i<=k;i++)typedef unsigned long long ull;ull dp[32][10];void init() { int i, j, k; dp[0][0] = 1; FOR(i,1,25) FOR(j,0,9) { dp[i][j] = 0; FOR(k,0,9) if(j != 4 || k != 9) dp[i][j] += dp[i - 1][k]; }}ull calc(ull n) { static ull digit[32]; ull l = 0, ans = 0, i, j; while (n) { digit[++l] = n % 10; n /= 10; } digit[l+1]=0; for (i = l; i; --i) { for (j=0;j<digit[i];j++) if (!(digit[i + 1] == 4 && j == 9)) ans += dp[i][j]; if (digit[i] == 9 && digit[i + 1] == 4) break; } return ans;}int main() { ull i; int t; init(); scanf("%d", &t); while (t--) { scanf("%I64u", &i); printf("%I64u\n", i+1-calc(i+1)); } return 0;}
0 0
- 数位dp
- 数位DP
- 数位DP
- 数位dp
- 数位dp
- 数位dp
- 数位DP
- 数位dp
- 数位DP
- 【数位DP】
- 数位DP
- 数位dp
- 数位dp
- 数位DP
- 数位DP
- 数位dp
- 数位DP
- 数位DP
- poi导出excel (大数据)
- Oracle学习(六)----子查询
- JAVA中,把电脑里所有的.jpg文件保存到f盘指定目录下,并且文件不重名
- mysqldump: Got error: 1142
- 每天一篇python:文件下载篇
- 数位DP
- 【学习汇总】DIV水平居中
- QWidget: Must construct a QApplication before a QWidget
- [BZOJ1036][ZJOI2008]树的统计Count
- Android Volley完全解析(四),带你从源码的角度理解Volley
- 浏览器兼容笔记(1)
- JavaWeb中的文件上传与下载
- static特别用法【静态导包】——Java包的静态导入
- 林小欣的every day