HDU 3555 (递推&&记忆化)
#include<stdio.h>
#include<string.h>
#define max 25 typedef __int64 LL;
LL dp[max][];
//dp[i][0] 不含49
//dp[i][1] 不含49但最高位为9
//dp[i][2] 含49 void init(){
memset(dp,,sizeof(dp));
dp[][]=;
for(int i=;i<max;i++){
dp[i][]=dp[i-][]*-dp[i-][];
dp[i][]=dp[i-][];
dp[i][]=dp[i-][]*+dp[i-][];
}
} LL solve(LL n){
int bit[max],len=;
while(n){
bit[++len]=n%;
n/=;
}
bit[len+]=;
LL ans=;
bool flag=false;
for(int i=len;i;i--){
ans+=bit[i]*dp[i-][];
if(flag){
ans+=bit[i]*dp[i-][];
}
else{
if(bit[i]>){
ans+=dp[i-][];
}
if(bit[i+]==&&bit[i]==){
flag=true;
}
}
}
if(flag){
ans++;
}
return ans;
} int main(){
init();
int T;
scanf("%d",&T);
while(T--){
LL n;
scanf("%I64d",&n);
printf("%I64d\n",solve(n));
}
} #include<stdio.h>
#include<string.h>
#define max 25 typedef long long LL;
LL dp[max][];
int bit[max],len; LL dfs(int pos,int have,int doing){
if(pos==){
return have==;
}
if(!doing && dp[pos][have]!=-){
return dp[pos][have];
} LL ans=;
int end=doing?bit[pos]:;
for(int i=;i<=end;i++){
int nhave=have;
if(have==&&i!=){
nhave=;
}
if(have==&&i==){
nhave=;
}
if(have==&&i==){
nhave=;
}
ans+=dfs(pos-,nhave,doing&&i==end);
}
if(!doing){
dp[pos][have]=ans;
}
return ans;
} LL solve(LL n){
len=;
while(n){
bit[++len]=n%;
n/=;
}
return dfs(len,,true);
} int main(){
memset(dp,-,sizeof(dp));
int t;
scanf("%d",&t);
while(t--){
LL n;
scanf("%lld",&n);
printf("%lld\n",solve(n));
}
}
HDU 3555 (递推&&记忆化)的更多相关文章
- [SCOI2008]着色方案 递推 记忆化搜索
我们发现 $c_{i}$ 和 $k$ 的规模非常小我们还发现每种颜色的位置是不必知道的,只要这种颜色和相邻的颜色种类不同即可.定义状态 $f[a][b][c][d][e][last]$,代表有 $a$ ...
- HDOJ(HDU).2044-2049 递推专题
HDOJ(HDU).2044-2049 递推专题 点我挑战题目 HDU.2044 题意分析 先考虑递推关系:从1到第n个格子的时候由多少种走法? 如图,当n为下方格子的时候,由于只能向右走,所以有2中 ...
- HDU 2842 (递推+矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个 ...
- "红色病毒"问题 HDU 2065 递推+找循环节
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=2065 递推类题目, 可以考虑用数学方法来做, 但是明显也可以有递推思维来理解. 递推的话基本就是状态 ...
- Children’s Queue HDU 1297 递推+大数
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1297 题目大意: 有n个同学, 站成一排, 要求 女生最少是两个站在一起, 问有多少种排列方式. 题 ...
- [HDU 1428]--漫步校园(记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428 漫步校园 Time Limit: 2000/1000 MS (Java/Others) M ...
- hdu 2044-2050 递推专题
总结一下做递推题的经验,一般都开成long long (别看项数少,随便就超了) 一般从第 i 项开始推其与前面项的关系(动态规划也是这样),而不是从第i 项推其与后面的项的关系. hdu2044:h ...
- hdu 4597 Play Game(记忆化搜索)
题目链接:hdu 4597 Play Game 题目大意:给出两堆牌,仅仅能从最上和最下取,然后两个人轮流取,都依照自己最优的策略.问说第一个人对多的分值. 解题思路:记忆化搜索,状态出来就很水,dp ...
- hdu 1142 最短路+记忆化
最短路+记忆化搜索HDU 1142 A Walk Through the Forest链接:http://acm.hdu.edu.cn/showproblem.php?pid=1142 > 题意 ...
随机推荐
- python实现批量修改服务器密码
需求:机房.线上有多台主机,为了保障安全,需要定期修改密码.若手动修改,费时费力易出错. 程序应该满足如下需求 : 1.在现有的excel密码表格,在最后一个字段后面生成新的密码,另存为一个新的exc ...
- java基础之BigDecimal类
由于在运算的时候,float类型和double很容易丢失精度,演示案例.所以,为了能精确的表示.计算浮点数,Java提供了BigDecimal BigDecimal类概述 不可变的.任意精度的有符号十 ...
- Ubuntu下U盘能看见盘符但打不开
查看U盘状态 sudo fdisk -l 格式化 sudo mkfs -t vfat -I /dev/sdb1 sudo mkfs -t ntfs -I /dev/sdb1 sudo mkfs -t ...
- java笔试之求int型正整数在内存中存储时1的个数
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 关键点:n与二进制的1相与:判断最末位是否为1:向右移位. 类似题目是查找输入整数二进制中1的个数. package test; ...
- 在ALV点击Key值调用TCode,跳过初始屏幕
在开发ALV报表时,通常业务部门会要求在ALV中点击单据号,屏幕跳转到具体业务凭证中查看业务明细,效果如下图: 点击销售销售订单号或者交货单号可传入单据号直接打开销售订单或交货单,实现方式如下: 一. ...
- 牛客NOIP暑期七天营-TG1 赛后题解
目录 牛客NOIP暑期七天营-提高组1 A-最短路 题目描述 link 题解 代码 B-最小生成链 题目描述 link 题解 代码 C-最小字典最短路 题目描述 link 题解 Update 牛客NO ...
- 复制字符串 _strdup _wcsdup _mbsdup
Duplicate strings.函数定义: char *_strdup( const char *strSource ); wchar_t *_wcsdup( const wchar_t *str ...
- ASCII、Unicode、UTF-8 字符串和编码
字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特 ...
- java虚拟机(十四)--字节码指令
字节码指令其实是很重要的,在之前学习String等内容,深入到字节码层面很容易找到答案,而不是只是在网上寻找答案,还有可能是错误的. PS:本文基于jdk1.8 首先写个简单的类: public cl ...
- vs2013+opencv2410的一些问题
1.设置microsoft.user时,debug和relaese只能修改一次,相对应的32和64会相应修改,因此可以新建一个属性表,命名为OpenCV2410debug: 2.报错:error LN ...