\(wobmaj\)有\(n\)個資料結構,第\(i\)個資料結構具有工業指數\(a_i\)和包容指數\(b_i(b_i\le a_i)\)資料範圍很小,\(dp\)可行。他會不斷執行下面這個操作,直到無法再執行為止:
選擇二元組\((i,j)\),將第\(i\)個資料結構套進第\(j\)個資料結構裡,其中\(a_i。
每個資料結構只能巢狀和被巢狀一次。
求可能出現的不同局面的數量。答案對\(10^9+7\)取模。
\(n\le 300,b_i
因為\(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直到該程序結束。除非在這個過程中,...