牛客练习赛84 C.牛客推荐系统开发之选飞行棋子(状态dp)
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客练习赛84 C.牛客推荐系统开发之选飞行棋子(状态dp)相关的知识,希望对你有一定的参考价值。
顺序考虑 1... n 1...n 1...n每个物品的选择情况
由于只有 4 4 4个人,每个人只有选和没选两种状态,考虑状压
定义 f [ i ] [ j ] f[i][j] f[i][j]表示前 i i i个物品,这 4 4 4个人的选择状态为 j j j的方案数(二进制为 1 1 1表示选了)
枚举物品 i i i,枚举状态 j j j
对于第 i i i个物品,枚举是第 1 , 2 , 3 , 4 1,2,3,4 1,2,3,4个人取
类似的转移就好了
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
const int mod = 1e9+7;
int n;
long long f[maxn][1<<5];
char a[5][maxn];
int main()
{
cin >> n;
for(int i=1;i<=4;i++) cin >> ( a[i]+1 );
f[0][0] = 1;
for(int i=1;i<=n;i++)
{
for(int q=0;q<(1<<4);q++)
{
f[i][q] += f[i-1][q];
for(int j=1;j<=4;j++)
{
if( (q>>(j-1))&1 ) continue;
if( a[j][i]=='0' ) continue;
f[i][q|(1<<(j-1))] += f[i-1][q];
}
}
}
cout << f[n][(1<<4)-1];
}
以上是关于牛客练习赛84 C.牛客推荐系统开发之选飞行棋子(状态dp)的主要内容,如果未能解决你的问题,请参考以下文章
牛客练习赛84 D.牛客推荐系统开发之动态特征获取(set应用)
牛客练习赛84:牛客推荐系统开发之标签重复度(点分治+动态开点权值线段树)