SOSの問題

SOSの問題

テンプレート

//iterative version
for(int mask = 0; mask < (1<<N); ++mask){
	dp[mask][-1] = A[mask];	
    //handle base case separately (leaf states)
	for(int i = 0;i < N; ++i){
		if(mask & (1<<i))
			dp[mask][i] = dp[mask][i-1] + dp[mask^(1<<i)][i-1];
		else
			dp[mask][i] = dp[mask][i-1];
	}
	F[mask] = dp[mask][N-1];
}

//memory optimized, super easy to code.
for(int i = 0; i<(1<<N); ++i)
	F[i] = A[i];
for(int i = 0;i < N; ++i) for(int mask = 0; mask < (1<<N); ++mask){
	if(mask & (1<<i))
		F[mask] += F[mask^(1<<i)];
}

IMG

S(マスク、i)は、ビットの異なるサブセットにi番目のビット0を表します。

時間複雑\(O(N2 ^ N) \)

チュートリアル

https://codeforces.com/blog/entry/45223

https://blog.csdn.net/weixin_38686780/article/details/100109753

練習問題

私はあなたがそれを楽しんだことを望みます。以下は、SOSの上に構築されたいくつかの問題です。

EDIT:練習問題は、現在ではほとんど難易度の昇順に配置されています。

おすすめ

転載: www.cnblogs.com/guaguastandup/p/12585207.html