luogu4370
一開始入隊的數字肯定是\(c^_n\),然後將它上下左右能入堆的入堆,取出堆首元素後以此類推
要注意同乙個組合數不能重複進堆,所以需要判重,但是如果根據當前擴充套件的元素是否在答案序列中來判斷是否應該進堆,比如這樣:
void bfs(int n,int k) ,dy[4]= ;
q.push(comb(n,n/2));
while(!q.empty()) }}
}
這樣還是會有很多重複元素進堆,還是會超時
因為如果當前擴充套件到了\(c_n^m\) ,而\(c_n^m\) 不在答案序列中,但是它有可能已經在堆中了!只是還沒有彈出!所以\(c_n^m\)就會被再次壓入堆中!
輸出中間結果可以發現,這樣的話同乙個元素遠不止會進堆兩次,造成了大量的重複
所以要根據"是否已經進過堆"來判重.
再開乙個vis
來記錄就行了
#include #include #include #include #include using namespace std;
typedef pairpii;
const int maxn=1e6+10,mod=1e9+7;
int f[maxn],inv[maxn],g[maxn];
double ln_fact[maxn];
struct comb
bool operator < (const comb& rhs)const
};priority_queueq;
setans,vis;
inline int pow(int base,int index)
return ans;
}inline void init(int maxn)
void bfs(int n,int k) ,dy[4]= ;
q.push(comb(n,n/2));
while(!q.empty()) }}
}int main()
cout《壓行技術大有提公升qaq
Code 4 組合數問題2
展開 題目描述 眾所周知,小蔥同學擅長計算,尤其擅長計算組合數,所以小蔥給了你兩個數 nn 和 kk,希望你找到 kk 個不同的組合數使得這 kk 個組合數的和最大。所謂不同的組合數,即對於組合數 c ca1 b1 和 c ca2 b2 若 a 1 neq a 2a1 a2 或者 b 1 neq b...
P4370 Code 4 組合數問題2
題目要求當 0 leq a leq b leq n 時,k 個 tbinom 的和的最大值 觀察楊輝三角形,可以發現,最大的 tbinom 為 tbinom 還可以知道,除了當前最大的組合數以外,可能最大的,是它周圍的四個 即如果當前確定的最大組合數為 tbinom 則接下來有可能成為最大的數是 t...
求值2 組合數公式題目
ans 0 for inti 1 i n i for int v 0 v n v ans ans c i,v c i,v 998244353 c i,v 為組合數第i行第v列的數。給你上面的 中的n,請你輸出ans的值。輸入乙個整數n輸出ans的值。示例1 複製3複製 這題然後就變成了 求組合數的問...