题意:
给定范围[L, R] 和 k(1~10)求范围内数位的LIS(最长上升子序列)等于k的数的个数。
思路:
普通的LIS做法是对于当前的数,在模拟数列中找到第一个比他大的并替换掉。
在数位DP中需要状态压缩,其实对于每个数只有两种状态,即在模拟数列中或者不在。那么就可以用二进制(1<<10)来表示总的状态。
#includeusing namespace std;typedef long long ll;int t, k;int bits[20];ll l, r;ll dp[20][1<<10][11];bool judge(int state) { int cnt = 0; for(int i = 0; i < 10; i++) if(state & (1<