傳送門
分層dp的思路
d pi
,j,s
dp_dp
i,j,
s表示做到第i
ii層,總共選了j
jj個點,第i
ii層選了s
ss個點的方案數
是由上一層轉移過來的,所以列舉上一層選的點數w
ww得到乙個比較複雜的轉移方程
意義是,從這一層開始,總共剩餘(n−
j+s−
1)
(n-j+s-1)
(n−j+s
−1)個點可選,選擇s
ss個點,就是cn−
j+s−
1s
c_^cn
−j+s
−1s
,但是如果這一層是最後一層,只能選擇(s−
1)
(s-1)
(s−1)個點
對於這一層的每個點,可以向上一層w
ww個點隨便幾個點連邊,但至少向乙個點連,每個點都是這樣,所以方案數是乘法原理(2w
−1)s
(2^w-1)^s
(2w−1)
s對於這一層,所有點之間兩兩可能連邊,方案數是2s(
s−1)
22^}
22s(s−
1)乘起來就行了
累計最終答案,ans
=∑i=
k+1n
∑j=1
ndpk
,i,j
∗2(n
−i)(
n−i−
1)2+
j(n−
i)
ans=\sum_^\sum_^dp_*2^+j(n-i)}
ans=∑i
=k+1
n∑j
=1n
dpk,
i,j
∗22(
n−i)
(n−i
−1)
+j(n
−i)意義是,剩餘的點任其自生自滅,邊隨便連,方案數為2(n
−i)(
n−i−
1)
22^}
22(n−i
)(n−
i−1)
整層j
jj個點和剩餘的點隨便連邊,方案數為2j(
n−i)
2^2j
(n−i
)code:
#include
#define ll long long
#define maxn 210
using
namespace std;
const ll qy =
1000000007
;ll n, m, fac[maxn]
, inv[maxn]
, dp[maxn]
[maxn]
[maxn]
;ll ksm
(ll n, ll k)
void
add(ll &x, ll y)
ll c
(int m,
int n)
intmain()
題解 慈溪中學 8 13 T3
傳送門 奇妙ac。發現答案最多是2 用相對運動,兩個矩形,乙個靜止,那麼另乙個就是沿著k 1k 1 k 1 的直線運動 然後想到乙個o n 2 o n 2 o n2 的,列舉任意兩個矩形間是否會有重疊部分的情況 然後這個che ck check chec k想了好一會 先是對於每個點,都會有乙個在k...
SRM605題解(T3除外)
t1 題目大意 給定n個物品,每個物品有兩個屬性a i 和b i 選擇一些物品使得c d最大化,其中c為所選物品中a i 的不同的數字個數,d為所選物品中b i 的總和。主要思路 由於a i 比較小,所以可以對不同的a i 進行一次dp,f i 代表從所有a i i的物品中選擇乙個子集使得權值和最大...
SRM606題解(除T3外)
t1 題目大意 兩個人玩遊戲,第乙個人猜數字,第二個人回答和正確數字相差多少。進行n次後,問正確數字是多少。主要思路 模擬!include include include include includeusing namespace std void swap int a,int b int abs...