HDU 6156 Palindrome Function(数位DP)题解
思路:
数位dp的操作是dfs+记忆化,我们dp开四维:位置,长度,进制,是否回文。然后每次暴搜记录下每个位置的数字是什么,搜到对称轴另一边需要检查是否符合回文。
终于把友谊赛的题目都补完了...没做出来的都是学过的,做出来的都是没学过骚操作过的...学以不致用...
代码:
#include<cstdio>
#include<set>
#include<stack>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn = 1000+5;
const int INF = 0x3f3f3f3f;
ll dp[40][40][40][2];
int bit[100],num[100];
ll dfs(int pos,int len,int k,int sta,bool limit){
if(pos < 0) return sta? k : 1;
if(!limit && dp[pos][len][k][sta] != -1) return dp[pos][len][k][sta];
int top = limit? bit[pos] : (k - 1);
ll ret = 0;
for(int i = 0;i <= top;i++){
num[pos] = i;
if(i == 0 && pos == len){ //前导〇
ret += dfs(pos - 1,len - 1,k,sta,limit && i == top);
}
else if(sta && pos < (len + 1)/2){
ret += dfs(pos - 1,len,k,i == num[len - pos],limit && i == top);
}
else{
ret += dfs(pos - 1,len,k,sta,limit && i == top);
}
}
if(!limit) dp[pos][len][k][sta] = ret;
return ret;
}
ll solve(int x,int k){
int pos = 0;
while(x){
bit[pos++] = x % k;
x /= k;
}
return dfs(pos - 1,pos - 1,k,1,true);
}
int main(){
int T,Case = 1;
int L,R,l,r;
scanf("%d",&T);
memset(dp,-1,sizeof(dp));
while(T--){
ll ans = 0;
scanf("%d%d%d%d",&L,&R,&l,&r);
for(int j = l;j <= r;j++){
ans += solve(R,j) - solve(L - 1,j);
}
printf("Case #%d: %lld\n",Case++,ans);
}
return 0;
}
HDU 6156 Palindrome Function(数位DP)题解的更多相关文章
- HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛
普通的数位DP计算回文串个数 /* HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 2-36进制下回文串个数 */ ...
- HDU 6156 Palindrome Function
http://acm.hdu.edu.cn/showproblem.php?pid=6156 题意:$f(n,k)$表示判断n在k进制下是否是回文串,如果是,则返回k,如果不是,则返回1.现在要计算$ ...
- HDU-6156 Palindrome Function(数位DP)
一.题目 二.思路 1.这是很明显的数位DP: 2.和以往数位DP不同的是,这里带了个进制进来,而以往做是纯十进制下或者纯二进制下做操作.但是,不管多少进制,原理都是一样的: 3.这里有个小坑,题目中 ...
- HDU 6156 回文 数位DP(2017CCPC)
Palindrome Function Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Ot ...
- 【数位DP】HDU 6156 Palindrome Function
http://acm.hdu.edu.cn/showproblem.php?pid=6156 [AC] #include<bits/stdc++.h> using namespace st ...
- Kuangbin 带你飞 数位DP题解
以前一直不知道该咋搞这个比较好. 感觉推起来那个数字好麻烦.后来有一种比较好的写法就是直接的DFS写法.相应的ismax表示当前位是否有限制. 数位DP也是有一种类似模版的东西,不过需要好好理解.与其 ...
- HDU 2089 - 不要62 - [数位DP][入门题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...
- HDU 5179 beautiful number 数位dp
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- hdu 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
随机推荐
- Dropwizard简单入门
Dropwizard:一个简洁的RESTful Web框架 Dropwizard跨越了开发库与框架的界限,旨在为Web应用所需的功能提供高性能.可靠的实现.Dropwizard将这些功能抽象为可重用的 ...
- 【BZOJ3943】[Usaco2015 Feb]SuperBull 最大生成树
[BZOJ3943][Usaco2015 Feb]SuperBull Description Bessie and her friends are playing hoofball in the an ...
- python webdriver中对不同下拉框通过文本值的选择
在自动化中python对下拉框的处理网上相对实例比较少,其它前辈写的教程中对下拉也仅仅是相对与教程来说的,比如下面: m=driver.find_element_by_id("Shippin ...
- IDEA 配置
配置sublime主题: 击链接 http://www.riaway.com,选择并下载自己喜欢的主题 file -->import setting 到刚刚下载的主题jar包,之后导入,重起i ...
- 【事件流】浅谈事件冒泡&&事件捕获------【巷子】
首先在扯淡的时候我们需要先了解一个东西,这个东西就是事件流. 1.什么是事件流? 解释:当一个HTML元素触发一个事件处理函数的时候,该事件会在该元素节点到根节点之间传播,传播路径所经过的节点都会接受 ...
- mysql 修改配置文件性能优化
vim /etc/my.cnf 原配置文件 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # ...
- Oracle HA 之 基于活动数据库复制配置oracle 11.2 dataguard
规划:主库:db_name=dbking db_unique_name=dbkingpri 备库:db_name=dbking ...
- vue知识总汇
学前预备知识 ECMAScript简介和ES6的新增语法 Nodejs基础 webpack的介绍 babel简介 vue基础 vue基础
- display属性的表格布局相关属性
基于CSS属性display:table的表格布局的使用 项目改造中遇到DIV+CSS实现的table,新需求需要在表格使用单元格合并,网上调查返现CSS display:table实现的tabl ...
- 使用递归打印二叉树的左视图 java
使用递归打印二叉树的左视图 java package com.li.jinRiTouTiao; public class PrintLeftView { static class TreeNode{ ...