HDU 3555 (递推&&记忆化)
2024-09-06 12:15:25
#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));
}
}
最新文章
- c 二叉树的使用
- 如果你也会C#,那不妨了解下F#(2):数值运算和流程控制语法
- office2003安装公式编辑器mathtype5.2
- Dapper学习 - Dapper.Rainbow(二) - Update/Delete
- Java中primitive type的线程安全性
- Asp.net Mvc4 使用Cas单点登录
- Web前端面试题集锦
- Insert后返回自动插入的生成的ID:select @@identity
- SGU 112.a^b - b^a
- Django之CSRF 跨站请求伪造
- Equations(hdu 1496 二分查找+各种剪枝)
- Android它SDK Manager无法更新终极解决方案
- android 垃圾回收机制
- 4月11日java多线程4
- 利用git向github上远程提交一个自己的开源项目
- 『编程题全队』";Gugua";事务管理系统项目宣传文案
- php分享十七:http状态码
- 跳转到appstore下载app的链接 记录一下
- Python开发【模块】:Pygal 绘制直方图
- web api的新玩法