XHXJ's LIS HDU4352(数位DP)

为在[L, R]区间中, 组成数字严格上升并且长度为K的个数

主要是状态的变化,

这里用了状态压缩来压缩一个10位数, 对于1356  长度不变的情况下如果要插入4,更具O(nlgn)
的LIS算法,会更新成1346, 是找到里面 a[i] > 4的第一个数,把他从原状态中去掉(s ^ (1 << i)) 再把x = 4 加上的情况  s‘ | (1 <<x) 

/***********************************************
 * Author: fisty
 * Created Time: 2015/6/18 16:56:17
 * File Name   : hdu4352.cpp
 *********************************************** */
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define Debug(x) cout << #x << " " << x < P;
#define FOR(i, a, b) for(int i = a;i < b; i++)
#define MAX_N 21
int t;
LL L, R, K;
int digit[MAX_N];

LL f[MAX_N][1<<10][MAX_N];

int getcount(int x){
    int sum = 0;
    while(x){
        if(x & 1) sum++;
        x >>= 1; 
    }
    return sum;
}
int getnew(int x, int s){
    for(int i = x;i < 10; i++){
        //寻找s中比x 大的第一个数 i
        if(s & (1<> t;
    int cnt = 1;
    Memset(f, -1);
    while(t--){
        cin >> L >> R >> K;
        cout << "Case" << " #" << cnt++ << ": ";
        cout << solve(R) - solve(L-1) << endl;
    }
    return 0;
}


你可能感兴趣的:(------基础DP,动态规划)