題面
我們發現每個數 n
nn 是否被選,只與 n3,
n2,2
n,3n
\frac,\frac,2n,3n
3n,2n
,2n
,3n 有關,那麼我們考慮建一張表,表上每一行按照 ×
3\times 3
×3的方式遞增,每一列按照 ×
2\times 2
×2的方式遞增,那麼對於同一張表,任意上下左右相鄰的數都是不能選的,那麼這樣的表一共有 n−n
2−n3
+n2×
3n-\frac-\frac+\frac
n−2n−
3n+
2×3n
種,每一張表的轉移是 log2
n×22
×log3
n\log_2 n\times 2^
log2n
×22×
log3n
雖然理論複雜度達到了 5e10
5e10
5e10
但是實際跑下來十分優秀,可能因為後來的表變的極小,轉移的複雜度大幅降低
#include
using
namespace std;
namespace zzc
while
(isdigit
(ch)
)return x*f;
}const
int maxn =
1e5+5;
const
int maxm =
5005
;const
int mod =
1e9+1;
int n,r,sta[maxm]
,num[20]
,f[20
][maxm]
;long
long ans=
1,sum;
bool vis[maxn]
;void
update
(int x)}}
for(
int i=
0;i<(1
<);i++
) sum=
(sum+f[r-1]
[i])
%mod;
ans=ans*sum%mod;
}void
work()
}int
main()
洛谷 3226 HNOI2012 集合選數
哇很好很好的 dp 題目 yyr 講了這道題之後我瞬間就忘記啦,所以只能自己想了 大概思路還是記得噠 很明顯這題就是不能讓你去暴力列舉的,階乘級別的複雜度啊 但是怎麼去 dp 呢,單純的根據題意去嘗試定義 dp 方程似乎並不是很容易定義,這個時候需要嘗試構造模型 選了乙個元素就不能選另乙個元素或者另...
HNOI2012 集合選數
這是題目 大概就是讓你找方案數嘛。開始我還以為是一道規律題,然後有愉快地打了乙個暴搜打表。找了十分鐘沒找出來。www.oeis.org。結果.這是表 半點規律沒有。然後想了想dp,想不出線性或帶log的。最後實在做不出來了,於是問了個大犇。大犇說這道題要用矩形。尼瑪沒在逗我。把題目意思轉換一下嘛。就...
題解 HNOI2012 集合選數
題目傳送門 直接看題面吧。感覺挺水的一道題啊?怎麼評到紫色的啊?考試的時候ljs出了這個題的加強版我就只想出這個思路,然後就爆了。不難發現,我們可以構造矩陣 x 2x 4x 6x 3x 6x 12x 24x 48x 9x 18x 36x 然後實際上就相當於在這個矩陣中選出一些數使得兩兩不相鄰。因為行...