【hdu】4352 XHXJ's LIS【状压+数位dp】
来源:互联网 发布:人人商城分销6.0源码 编辑:程序博客网 时间:2024/05/18 03:23
题意:题目这么长,其实就是找出区间内如果把数字看成一个阿拉伯数字的集合的话,这个集合中最长严格上升子序列的长度为k的个数
题解:主要是如何储存之前的状态比较难想,考虑到有0-9十个数字和nlogn的LIS求法,我们可以用状态s表示当前哪些数字是在求LIS的那个数组中的,然后每新加一个数,就更新状态s,这种状态s的更新可以预处理出来,其他的就和普通的数位dp一样了
#include<cstdio>#include<cstring>#define ll __int64using namespace std;int one[1<<10],nxt[1<<10][10];ll dp[30][1<<10][11];int k,bit[30];int Find(int x,int y){ for(int i=y;i<10;i++) if(x&(1<<i))return (x^(1<<i))|(1<<y); return x|(1<<y);}void init(){ for(int i=0;i<(1<<10);i++){ one[i]=0; for(int j=0;j<10;j++){ if(i&(1<<j))one[i]++; nxt[i][j]=Find(i,j); } }}ll dfs(int pos,int status,bool zero,bool limit){ if(pos==0) return one[status]==k; if(!limit&&dp[pos][status][k]!=-1)return dp[pos][status][k]; ll ans=0; int End=limit?bit[pos]:9; for(int i=0;i<=End;i++) ans+=dfs(pos-1,(zero&&i==0)?0:nxt[status][i],zero&&i==0,limit&&i==End); if(!limit) dp[pos][status][k]=ans; return ans;}ll solve(ll n){ int len=0; while(n){bit[++len]=n%10;n/=10;} return dfs(len,0,1,1);}int main(){ int T,kase=0; ll l,r; init(); memset(dp,-1,sizeof(dp)); scanf("%d",&T); while(T--){ scanf("%I64d%I64d%d",&l,&r,&k); printf("Case #%d: %I64d\n",++kase,solve(r)-solve(l-1)); } return 0;}
0 0
- 【HDU】4352 XHXJ's LIS 数位DP
- 【数位DP】【hdu 4352】XHXJ's LIS
- HDU 4352 XHXJ's LIS 数位dp
- HDU 4352 XHXJ's LIS(数位DP)
- hdu 4352 XHXJ's LIS(数位dp)
- HDU 4352 XHXJ's LIS【数位DP】
- 【hdu】4352 XHXJ's LIS【状压+数位dp】
- HDU 4352 XHXJ's LIS(数位DP+状压)
- HDU-4352 XHXJ's LIS(数位dp+状压)
- hdu 4352 XHXJ's LIS(LIS+数位DP,5级)
- 数位dp+LIS+状态压缩-hdu-4352-XHXJ's LIS
- HDU 4352 XHXJ's LIS 数位dp+lis
- hdu 4352 XHXJ's LIS --- 数位dp 状态压缩
- hdu 4352 XHXJ's LIS (数位dp)
- [数位dp+状态压缩] hdu 4352 XHXJ's LIS
- HDU 4352 XHXJ's LIS(数位DP)
- hdu 4352 - XHXJ's LIS (数位dp)多校联合
- HDU 4352 XHXJ's LIS (数位DP+状态压缩)
- CodeForces 385C Bear and Prime Numbers
- 【HDU】5492 Find a path(2015 ACM/ICPC Asia Regional Hefei Online)
- java spring mvc视频教程及项目源码之spring mvc入门到精通
- form 表单验证
- 【命令】iwconfig/iwpriv
- 【hdu】4352 XHXJ's LIS【状压+数位dp】
- 1.IntelliJ IDEA常用快捷键
- mysql单表多timestamp报错
- Thread线程中start()和run()方法的区别
- 苹果iOS系统下检查第三方APP是否安装
- 关于Spring系统无法找到指定的文件
- 谈谈iOS Animation
- pandas 新手指引
- input keyup 500ms 延时输入 事件处理