SGU 492 经典数位dp
来源:互联网 发布:软件性能测试分类 编辑:程序博客网 时间:2024/05/17 06:02
计数时不要某个数字,求数字对应的序号或者求某个序号对应的数字
解决方式是记忆化搜索
long long 是肯定的,并注意n最大时对应的答案的范围
原来1000000000000000000 < pow(2.0,62)……
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>using namespace std;#define ll long longll dp[2][20];int num[20];ll dfs(int cur,bool ok,int pre) // ok is no limit or not,pre is 1 previous or not{if(ok && dp[pre][cur]!=-1)return dp[pre][cur];if(cur==0)return 1;ll ret=0;for(int i=0;i<10;++i){if(!ok && i>num[cur])break;if(pre && i==3)continue;if(!ok && i==num[cur])ret+=dfs(cur-1,false,i==1?1:0);elseret+=dfs(cur-1,true,i==1?1:0);}if(ok)return dp[pre][cur]=ret;else return ret;}int main (){int test;scanf("%d",&test);memset(dp,-1,sizeof(dp));while(test--){ll n;cin>>n;int cnt=0;ll left=0,right=2000000000000000000;while(left<right){ll mid=(left+right)/2;ll k=mid;int cnt=0;while(k){num[++cnt]=k%10;k/=10;}ll res=dfs(cnt,false,0);res--;if(res>=n)right=mid;else left=mid+1;}cout<<left<<endl;}return 0;}
- SGU 492 经典数位dp
- hdu3555 经典数位dp
- hdu3652 数位dp经典
- 【数位DP】【SGU 258】. Almost Lucky Numbers
- SGU 390 Tickets(数位DP)
- SGU 390 Tickets(数位dp,较难)
- sgu 390 购票(上下界数位dp)
- hdu3555经典的数位dp
- 数位DP-不要62-经典DP-hdu2089
- SGU 365 Ships of the Desert 简单数位dp
- SGU 390 Tickets (数位DP, k进制树)
- SGU 390 Tickets (数位dp,k进制树的合并)
- hdu 3943 经典数位dp好题
- hdu 3555 Bomb 经典数位DP
- hdu2089 不要62--经典数位DP
- HDU3555 Bomb 数位DP经典题
- HDU 6156 Palindrome Function 经典数位DP
- SGU 104 Little shop of flowers 经典DP
- JAVA基础篇之枚举
- Oracle学习复习笔记
- Socket编程
- codeforces 55D Beautiful numbers
- 关于Qt模态与非模态对话框
- SGU 492 经典数位dp
- threadid=1: thread exiting with uncaught exception
- IO/输入输出
- 灰卡测白平衡使用方法
- Win7下安装使用VC6.0
- usb设备描述符包
- 设计模式之Strategy(策略)
- 【数据恢复】详解ORA-8103错误
- ofbiz SCREEN处理过程记录,以及查询相关的类