傳送門:
思路:這題想法比較神,實現卻很簡單
首先注意到「若 x 在該子集中,則 2x 和 3x 不能在該子集中」
然後寫出如下矩陣,其中每個數下面的數是它的2倍,右邊的數是它的3倍,且每個數不超過n
1 3 9 27...
2 6 18 54...
4 12 36 108...
然後再以這個矩陣中沒有出現的最小的數為左上角寫出新的矩陣,直到所有數都被寫入矩陣
這樣問題就轉化為取乙個點,下面和右邊的點不能取,狀壓即可
最後把每個矩陣的答案乘起來即可
#include#include#include#includetypedef long long ll;const int maxn=100010,maxk=22,mod=1000000001;
using namespace std;
int n,a[maxk][maxk],f[maxk][maxn],lim[maxk],pw[maxk];ll ans=1;bool bo[maxn];
ll query(int x)
return f[18][0];
}int main()
bzoj2734 HNOI2012 集合選數
time limit 10 sec memory limit 128 mb submit 831 solved 487 submit status discuss 集合論與圖論 這門課程有一道作業題,要求同學們求出的所有滿足以 下條件的子集 若 x 在該子集中,則 2x 和 3x 不能在該子集中。同...
bzoj2734 HNOI2012 集合選數
time limit 10 sec memory limit 128 mb submit 889 solved 523 submit status discuss description 集合論與圖論 這門課程有一道作業題,要求同學們求出的所有滿足以 下條件的子集 若 x 在該子集中,則 2x 和 ...
bzoj2734 HNOI2012 集合選數
題目鏈結 集合論與圖論 這門課程有一道作業題,要求同學們求出的所有滿足以 下條件的子集 若 x 在該子集中,則 2x 和 3x 不能在該子集中。同學們不喜歡這種具有列舉性 質的題目,於是把它變成了以下問題 對於任意乙個正整數 n 100000,如何求出 的滿足上述約束條件的子集的個數 只需輸出對 1...