直接貼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...