人人網上一道題目解答

2021-06-10 11:19:55 字數 808 閱讀 8089

有n塊木板,高度從1遞增至n。要求對這些木板進行排列,使之從左邊看能看到l塊,從右邊看能看到r塊。也就是說高的木板會把低的木板遮住。問總共有多少種排列方法。

這個題目經過網上查詢有兩種方法,非自己所想:

方法1:

首先是求出a[i][j],a[i][j]表示高度各不相同的i塊木板從某一側只能看到j塊。

a[i][j] =  ∑(a[k][j-1] * c[i][k] ) k∈(j-1, i);

a[i][0] = (i-1)!;

具體的過程是列舉最高處的位置。

然後通過再次列舉最高點的位置,將問題轉化為從左邊看有a[k][l],從右邊看有a[i - k - 1][r]的兩種互不影響的排列。

ans[i][l][r] = ∑( a[k][l] * a[i - k - 1][r] * c(i, k) ) k∈(l - 1, i - r - 1);

複雜度:求得c函式的複雜度是o(n^2),求得a[i][j]的複雜度是o(n^2),最後結果的複雜度也是o(n^2);

方法2:

直接求 ans[i][l][r]:這一次用構造的方法,逐步構造出解,對於ans[i][l][r]來說,構造每一次插入最小值,應該分三種情況:

從左端插入:ans[i-1][l-1][r];

從右端插入:ans[i-1][l][r-1];

從中間插入:ans[i-1][l][r];

特別地:ans[i][l][0] =0,ans[i][0][r] = 0;

感覺可以用記憶化搜尋的方法,求得結果。

複雜度:這個不會求,個人感覺是o(n^3);望各路大神指教~

一道this的題目

請問下面 中的this值指向的是全域性物件還是物件o?function f return c var o new f console.log o.constructor.name object這裡的this指向全域性物件,因為 c call without new。這裡用正常的方式呼叫的函式 c 所...

一道題目 intel

從序列中找四個四字子串形成十進位制數使之乘積最大 就是求四個最大的?我目前只想到如下辦法。這個題並不是關於複雜的演算法,其本意是要利用並行處理,但目前尚未考慮到 除了其中比較求最小值部分有希望用simd include int g teststring int main void int picke...

一道題目 移位

csdn上一道面試題 十進位制整數,計算對應的二進位制數包含多少個1,用位操作。int n 95625 int m 1 int num 0 for int i 0 i sizeof int 8 i cout num endl 讓1不斷移位去判斷與其對應位置是否為1 若是有符號整數 負數 原碼的補碼 ...