十二省聯考 2019 皮配

2022-10-10 20:39:13 字數 1985 閱讀 8699

這是一道揹包計數問題,所以可以從生成函式的角度來理解。

每個選手可選擇的是陣營\(0/1\),以及派系\(0/1\)

如果乙個城市選擇了第\(i\)陣營第\(j\)派系,那麼相當於分別讓陣營\(i\)和派系\(j\)的代價\(+s_i\)

設乙個沒有任何限制的學校的生成函式為\(1+x^+y^+x^y^\),其中\(x\)表示陣營\(1\),\(y\)表示派系\(1\)

對於乙個城市的學校集合為\(v\),假設它沒有偏好學校,它的生成函式就是

\[(1+x^})\prod_ 1+y^

\]對於含有偏好學校的城市,如果它的無偏好學校集合為\(v_1\),它的生成函式是

\[(1\times prod_0+x^\times prod_1)\prod_ 1+y^

\]\(prod_1\)和\(prod_0\)是偏好城市的生成函式的積

假如這個城市不加入陣營\(1\)派系\(0\),那麼它在\(prod_0\)的貢獻是\((1+y^)\),對\(prod_1\)的貢獻是\(y^\)

答案是所有城市的生成函式的積中滿足\(x\)的次和\(y\)的次數在範圍\([sum-c_0,c_1]\),和\([sum-d_0,d_1]\)的項的係數

對於沒有偏好的城市分別計算前部分\((1+x^)\)和後部分\(\prod 1+y^\)的係數

乘上有偏好學校城市的\(\prod_ 1+y^\)部分

其中\(x,y\)係數分開來算,這部分的複雜度是\(o(nm)\)

然後我們要求出\((1\times prod_0+x^\times prod_1)\)的乘積,用\(f_\)表示\(x^iy^j\)的係數

如果暴力乘的話,每個城市先分成\(prod_0\)和\(prod_1\)分別算貢獻,再加起來

單個學校合併是\(o(m_1)\)的,因為只有\(30\)個城市,\(s_i\leq 10\),所以\(m_1=300\)。

城市和城市合併是\(o(nm_1)\)的,所以總複雜度是\(o(knm_1)\)

最後列舉\(f_\),求出\(x,y\)的次數區間,字首和求區間和,相乘計入答案即可

ps: 算的時候要把沒有學校的城市去掉,不然20分歡迎你

#include#define ll long long

#define dbg1(x) cerr<<#x<<"="<<(x)<<" "

#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"

#define dbg3(x) cerr<<#x<<"\n"

#define me(x) memset(x,0,sizeof x)

using namespace std;

#define reg register

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}const int mm=2505,mn=1005,ms=11,mk=31,p=998244353;

int mul(int x,int y)

int add(int x,int y)

bool a[mn];

int n,c,c0,c1,d0,d1,b[mn],s[mn],k,p[mn],x[mm],y[mm],f[mm][mk*ms],f1[mm][mk*ms],sum[mn];

void pro(int *r,int ed,int ty,int i)

int main()

else

}sx=min(sx+sum[i],m);

for(u=sx;~u;--u)for(v=sy;~v;--v)f[u][v]=add(u>=sum[i]?f1[u-sum[i]][v]:0,f[u][v]);

} for(i=sx;~i;--i)for(j=sy;~j;--j)if(f[i][j])

printf("%d\n",ans);

} return 0;

}

十二省聯考2019 皮配

十二省聯考2019 皮配 巧妙運用 獨立 的性質,對於 不獨立 的進行暴力處理,再合併 1.dp i j k 前i個城市,藍有j,鴨有k個方案數 2.無限制時,城市的陣營和學校的派系獨立,直接dp出城市選擇方案,派系選擇方案,直接乘起來。顯然唯一分配且一一對應 有限制,只有30個 考慮對於有限制的城...

十二省聯考 2019 皮配

你有 n 個集合,每個集合裡有一些非負整數。有 4 個桶,現在要把每個非負整數放入其中 1 個桶。限制條件 1.同一集合的所有數要麼都放入第 1,2 個桶,要麼都放入第 3,4 個桶。2.有 k 個數有特殊要求 不能放入前 2 個桶或不能放入後 2 個桶。3.設 cnt i 為第 i 個桶放的數的總...

十二省聯考2019 皮配

題目 十二省聯考2019 皮配 設s等於各學校人數之和。首先,有乙個很簡單的 o nm 2 的 dp 記錄當前考慮到哪所學校,以及藍陣營人數a,鴨派系人數b,最後,只要滿足 s c1 a c0 且 s d1 b d0 這個方案就是合法的。寫上這個就有50分了。注意到還有20分滿足 k 0 即沒有限制...