題意: 給乙個n,求{1~n}的所有滿足以下條件的子集:若 x 在該子集中,則 2x 和 3x 不能在該子集中。
很神奇的一道題,剛開始以為是數學,還想了一下篩法什麼的。。。但是只要稍加思索就會發現,對於乙個元素,
有取與不取兩個狀態,如果用01狀態表示取與不取,就是乙個狀壓dp了,再看一看複雜度,靠譜。
但是怎樣滿足題設條件呢???
表示不會搜了題解,然後發現這題思想神的一逼:
對於乙個數x,構造乙個矩陣
x,3x,9x......
2x,6x,18x......
4x,12x,36x......
notice:陣列計算好,是18*11的,有個同學,開陣列開大了,空間上可以過,但是用memset清零超時了,一定不要多開!!!!!
#include#include#include
using
namespace
std;
typedef
long
long
ll;const
int mod=1000000001
;bool pd[100001
];int map[20][20],n,s[20],base[20
];ll dp[
20][1
<<11],ans=1ll;
inline
void make(int
x) }
memset(s,
0,sizeof
(s));
for(int i=1;i<=18;i++)
for(int j=1;j<=11;j++)
if(map[i][j]!=0
)
}inline
int dp(int
x)inline
void
solve()
printf(
"%lld
",ans%mod);
}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...