jzoj5230 隊伍統計 狀壓dp

2021-09-10 06:50:54 字數 1022 閱讀 2932

n

nn個人排隊,m

mm個條件(u,

v)

(u,v)

(u,v

)表示u

uu要排在v

vv前,可以去掉k

kk個,求方案總數

考慮依次插入人在隊頭

對於狀態1表示已經在佇列裡,0表示不在

f i,

jf_

fi,j

​表示i

ii表示狀態,j

jj表示違背了的條件個數。

然後列舉隊頭的是哪個人,計算出插入他前的狀態las

tlast

last

和將他插入隊頭會違背的條件個數nok

nokno

k。動態轉移fi,

j+=f

last

,j−n

ok

f_+=f_

fi,j​+

=fla

st,j

−nok

#include

#define n 21

using

namespace std;

const

int xjq=

1e9+7;

int n,m,k,atk[n]

,f[1

<[n],ans,ms;

intcount_one

(int x)

return ans;

}int

main()

ms=1<[0]=

1;for(

int i=

0;i)for

(int j=

0;j((i>>j)&1

)for

(int i=

0;i<=k;i++

) ans=

(ans+f[ms-1]

[i])

%xjq;

printf

("%d"

,ans)

;}

JZOJ 5230 隊伍統計 狀壓dp

現在有n個人要排成一列,編號為1 n 但由於一些不明原因的關係,人與人之間可能存在一些矛盾關係,具體有m條矛盾關係 u,v 表示編號為u的人想要排在編號為v的人前面。要使得隊伍和諧,最多不能違背k條矛盾關係 即不能有超過k條矛盾關係 u,v 滿足最後v排在了u前面 問有多少合法的排列。答案對10 9...

Jzoj5230 隊伍統計

現在有n個人要排成一列,編號為1 n 但由於一些不明原因的關係,人與人之間可能存在一些矛盾關係,具體有m條矛盾關係 u,v 表示編號為u的人想要排在編號為v的人前面。要使得隊伍和諧,最多不能違背k條矛盾關係 即不能有超過k條矛盾關係 u,v 滿足最後v排在了u前面 問有多少合法的排列。答案對10 9...

jzoj 5230 隊伍統計 狀態壓縮DP

description 現在有n個人要排成一列,編號為1 n 但由於一些不明原因的關係,人與人之間可能存在一些矛盾關係,具體有m條矛盾關係 u,v 表示編號為u的人想要排在編號為v的人前面。要使得隊伍和諧,最多不能違背k條矛盾關係 即不能有超過k條矛盾關係 u,v 滿足最後v排在了u前面 問有多少合...