ZOJ3816--Generalized Palindromic Number(DFS)
来源:互联网 发布:主升浪选股软件 编辑:程序博客网 时间:2024/05/15 17:15
题目大意:定义一种叫做广义回文数的数,就是把一串数字相邻的数字合并之后,如果是回文数,就是原串为广义回文数。例如,1121,合并之后是121,那么1121就是广义回文数。给出一个N,求小于N的最大广义回文数。
分析:搜了几篇题解之后,才知道可以直接暴力dfs。
根据回文的对称性,先从大到小枚举左边的数,然后,右边就可以与之匹配相对应的数。
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;LL n, m;int tot, digit[20], left[20], right[20];LL get(int s, int e) { LL ans = 0; for(int i = 1; i <= s; i++) ans = ans*10 + left[i]; for(int i = e; i >= 1; i--) ans = ans*10 + right[i]; return ans;}LL dfs(int s, int e, int flag) { //s表示左边放了几个数,e表示右边放了几个数,flag表示是否有数字的上限 LL ans = 0; if(s+e > tot) { ans = get(s-1, e); if(ans < n) return ans; else return 0; } int mx = flag ? digit[tot-s+1] : 9; for(int i = mx; i >= 0; i--) { left[s] = i; if((s == 1 || left[s] != left[s-1]) && !(s == 1 && i == 0) && (s+e < tot)) { for(int j = 1; j+s+e <= tot; j++) { right[e+j] = i; ans = max(ans, dfs(s+1, e+j, flag && i==mx)); } } else ans = max(ans, dfs(s+1, e, flag && i==mx)); if(ans > 0) return ans; } return ans;}int main() { int T; scanf("%d", &T); while(T--) { memset(digit, 0, sizeof(digit)); memset(left, 0, sizeof(left)); memset(right, 0, sizeof(right)); scanf("%lld", &n); m = n; tot = 0; while(m) { digit[++tot] = m%10; m /= 10; } printf("%lld\n", dfs(1, 0, 1)); }}
0 0
- ZOJ3816--Generalized Palindromic Number(DFS)
- zoj3816 Generalized Palindromic Number (暴力dfs)
- zoj3816,Generalized Palindromic Number,牡丹江网络赛,乱搞
- [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
- [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
- ZOJ 3816 Generalized Palindromic Number dfs+暴力枚举
- ZOJ - 3816 Generalized Palindromic Number dfs+数位DP+贪心
- ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
- ZOJ - 3816 Generalized Palindromic Number
- zoj 3816 Generalized Palindromic Number
- ZOJ 3816 Generalized Palindromic Number
- zoj 3816 Generalized Palindromic Number
- zoj 3816 Generalized Palindromic Number(枚举加构造)
- zoj 3816 Generalized Palindromic Number (根据对称性来搜)
- zoj 3816 Generalized Palindromic Number(暴力枚举)
- zoj 3816 Generalized Palindromic Number(搜索)
- [数位dp+二分] zoj Generalized Palindromic Number
- zoj3816(dfs + 数位DP)
- R learning -Base Graphics
- js 使用正则 邮箱
- HDOJ4029 不同子矩阵的个数
- Dhaka2014 I Volume of Revolution (积分求体积)
- CSU 1402 Fibonacci Multiply
- ZOJ3816--Generalized Palindromic Number(DFS)
- Java栈与堆
- 黑马程序员——33集合
- plsql登录时报错:Initialization error orcle not properly installed
- Android之将ListView嵌套到ScrollView中只显示一行的问题
- fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
- 混杂设备驱动模型
- 懒人必备之Android效率开发框架(伪原创)
- 谈谈spring中的拦截器interceptor