題解 慈溪中學 8 12 T3

2021-09-26 03:16:11 字數 1589 閱讀 9481

傳送門

分層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...