JLOI2013 地形生成 組合計數

2022-05-07 21:42:12 字數 965 閱讀 8401

\(n\) 元素各有乙個高度 \(h\) 和關鍵數字 \(b\) 。求有多少個下標序列和高度序列,滿足對任意 \(i\),\(j< i\) 且 \(h_j < h_i\)的 \(j\) 個數小於 \(b_i\)

高度序列

總時間複雜度為 \(o(n^2)\) 。

處理組合計數問題的技巧:插入數字或者保留位置;

排列 \(\rightarrow\) 組合:強制放置有序即可;

#includeusing namespace std;

#define go(u) for(int i=head[u],v=e[i].to;i;i=e[i].last,v=e[i].to)

#define rep(i,a,b) for(int i=a;i<=b;++i)

#define pb push_back

typedef long long ll;

inline int gi()

while(isdigit(ch))

return x*f;

}templateinline bool max(t &a,t b)

int n;

int ans1=1,ans2=1,f[n][n],s[n][n];

struct datadata(int a,int b):a(a),b(b){}

bool operator <(const data &rhs)const

}v[n];

int main()

for(int i=1,j=1;i<=n;i=j+1,j=i)

ans2=ans2*(s[j][i-1])%mod;

} printf("%d %d\n",ans1,ans2);

return 0;

}

JLOI2013 地形生成

排列計數的乙個經典做法就是按照某種順序將元素不斷往序列中插入,不難發現本題的第一問為了方便知道每個位置前面有多少個大於當前位置,我們可以考慮按高度從大到小地將一座座山不斷插入序列。假設當前沒有高度相同的山,當前考慮插入第 i 座山,是當前山的關鍵字,那麼我們能插入的位置就有 min 個,根據乘法原理...

bzoj 3193 JLOI2013 地形生成

難忘多少個日子之前,我對著這道題死磕了將近1 4 4 3 h的情景 差不多有一整個學校日 上午 下午 晚自習 都是淚啊 include include include include include using namespace std define maxn 1005 const int inf...

bzoj3193 JLOI2013 地形生成

最近ik正在做關於地形建模的工作。其中乙個工作階段就是把一些山排列成一行。每座山都有各不相同的標號和高度。為了遵從一些設計上的要求,每座山都設定了乙個關鍵數字,要求對於每座山,比它高且排列在它前面的其它山的數目必須少於它的關鍵數字。顯然滿足要求的排列會有很多個。對於每乙個可能的排列,ik生成乙個對應...