hdu 4996 1 n排列LIS值為k個數

2021-06-26 10:02:57 字數 904 閱讀 4908

直接貼bc題解

按數字1-n的順序依次列舉新增的數字,用2n

的狀態儲存在那個min陣列中的數字,每次新新增數字可以根據位置計算出新的min陣列。

怎麼快速計算呢?這裡如果列舉n的位置是不可行的,這樣2n

的state記錄的資訊不夠。很巧妙的思路是列舉放在當前位置的數字,比如說1-n-1的排列狀態下,列舉第n位為k,那麼1-n-1位的

>=

k 的數字全加1,就得到了乙個1-n的排列。

當然這個演算法是有問題的,但是由於求的是長度,所以所有j代表的狀態並不能正確表示對應的上公升序列,因為每個有值的dp[j]必然有j&1 == 1,但是卻奇蹟般的ac了..所以大致理解演算法思想和ac原因但是這個演算法的解釋略有疑問...
#include #include #include #include #include #include #include #include #include using namespace std;

#define rd(x) scanf("%d",&x)

#define rd2(x,y) scanf("%d%d",&x,&y)

#define rd3(x,y,z) scanf("%d%d%d",&x,&y,&z)

#define clr0(x) memset(x,0,sizeof(x))

typedef long long ll;

const int maxn = 1<<20;

int n,k;

ll f[20][20],dp[maxn],tmp[maxn];

int cal(int x)

}c[tot++] = k;

for(int l = 0;l < tot;++l)

}for(int l = 0;l < tot;++l){

st |= (1<

hdu2554 N對數的排列問題

假設所有的2n個資料的位置分別從1 2n標號。現在假設其中第ai個資料 雙胞胎 和bi。那麼他們的位置則相差i 1個位置 同理,那麼所有n組雙胞胎相差的資料sum bi ai i 1 2n 2 3 4 n n 1 n n 3 2 所有位置的和sum ai bi 1 2 n 2 n 2 又因為sum ...

HDU 2554 N對數的排列問題

n對數的排列問題 思路 設ai為第i個寶寶第一次出現的位置,bi是他第二次出現的位置,則bi ai i 1 bi ai 2 3 4 n 1 n 3 n 2 ai bi 1 2 3 2 n 2 n 1 n 得 2 ai 3 n2 n 2 ai 3 n 1 n 4 因為ai都為整數,所以 ai也為整數。...

HDU 2554 N對數的排列問題

link hdu 2554 這是昨天晚上小練裡面比較有趣的一道題 我在做的時候思路錯了,以為數字的排列會有規律,結果後面發現就算有也很難找.看了網上的題解,有一種恍然大悟的感覺,就直接把它當做方程來解,只要符合題意的x,y存在即可 題解 假設雙胞胎數為n,那麼就共有2n個人,把雙胞胎分開,分別記為a...