2020 7 4模擬 資料結構 ds

2022-04-07 23:42:09 字數 1413 閱讀 2925

\(wobmaj\)有\(n\)個資料結構,第\(i\)個資料結構具有工業指數\(a_i\)和包容指數\(b_i(b_i\le a_i)\)

他會不斷執行下面這個操作,直到無法再執行為止:

選擇二元組\((i,j)\),將第\(i\)個資料結構套進第\(j\)個資料結構裡,其中\(a_i。

每個資料結構只能巢狀和被巢狀一次。

求可能出現的不同局面的數量。答案對\(10^9+7\)取模。

\(n\le 300,b_i

資料範圍很小,\(dp\)可行。

因為\(b_i\le a_i\),所以乙個資料結構不能巢狀自己。

因為要執行到無法再執行為止,所以巢狀的資料結構數是固定並且最大的。

將乙個資料結構拆成\(a_i,b_i\)兩個點,從大到小排序,保證列舉到的\(a_i\)能被前面列舉的\(b_i\)巢狀。因為\(a_i=b_j\)時不能巢狀,所以相等時\(a\)在\(b\)前面。

設\(f[i][j][k]\)表示前\(i\)個點,有\(j\)個\(b\)點可選(沒有巢狀\(a\)點)。

\[f[i][j+1][k] += f[i-1][j][k]

\]\[f[i][j][j] += f[i-1][j][k]

\]\[f[i][j-1][k] += f[i-1][j][k] * (j-k)

\]\[f[i][j-1][k-1] += f[i-1][j][k] * k

\]統計答案時,如果有必選點剩餘則不合法。

最後答案即為\(\sum \limits_ ^ f[n*2][j][0]\)

用滾動陣列可以消去第一維,不要忘記把\(f[i\%2]\)清零。

**如下

#include#include#include#include#include#define mogeko qwq

using namespace std;

const int maxn = 305;

const int mod = 1e9+7;

int n,x,y,cnt;

long long ans,f[2][maxn][maxn];

struct node

} d[maxn<<1];

int main() ;

d[++cnt] = (node) ;

} sort(d+1,d+cnt+1);

f[0][0][0] = 1;

for(int i = 1; i <= cnt; i++)

}} }

for(int j = 0;j <= n;j++)

(ans += f[0][j][0]) %= mod;

printf("%lld",ans);

return 0;

}

LRU management(模擬資料結構)

lru,作業系統中的最近最常使用演算法 include define maxn 1000005 define ll long long using namespace std struct nodecash maxn 1 模擬鍊錶 表示儲存單元 unordered mapft 雜湊表對映 把位址規模...

演算法 模擬資料結構一

普通佇列 int q 10000 h 0,tt 1 新增乙個元素a q tt a 刪除末尾元素tt 刪除隊頭元素h 輸出while tt h 普通棧 int stock 100005 t 1 新增乙個元素a stock t a 刪除t 單鏈表 優點方便,缺點訪問前乙個元素需要重新訪問一遍 這種方法本...

模擬 資料結構 作業系統

第二題 作業系統 sys.exe 寫乙個程式來模擬作業系統的程序排程。假設該系統只有乙個cpu,每乙個程序的到達時間,執行時間和執行優先順序都是已知的。其中執行優先順序用自然數表示,數字越大,則優先順序越高。如果乙個程序到達的時候cpu是空閒的,則它會一直占用cpu直到該程序結束。除非在這個過程中,...