您的位置:首页 > 其它

AtCoder Grand Contest 017

2017-07-10 22:59 447 查看
noi前橙名计划失败。全程搞C而gg……

A - Biscuits

题意:背包,求价值为奇/偶的方案数。

#include<cstdio>
#include<algorithm>
#define MN 1000
using namespace std;

const int MOD=1e9+7;
int n,m,k,le[MN],ri[MN],x,y,z,mmh[1<<20],MMH=0;
inline void M(int &x){while(x>=MOD)x-=MOD;}
int lowbit(int x) { return x & -x; }
int main(){
scanf("%d%d%d",&n,&m,&k);n--;
for (int i=1;i<=m;i++) le[i]=(1<<n)-1,ri[i]=0;
while(k--){
scanf("%d%d%d",&x,&y,&z);y--;
if (z==0) le[x]^=1<<y;else ri[x]^=1<<y;
}
mmh[0]=1;
for (int i=1;i<=m;i++){
for (int k=0;k<n;k++)
for (int j=0;j<(1<<n);j++) if (~j>>k&1)
M(mmh[j+(1<<k)-lowbit(j&~((1<<k)-1))]+=mmh[j]);
for (int j=0;j<(1<<n);j++)
if (!((j&ri[i])==ri[i]&&(j&le[i])==j)) mmh[j]=0;
}
for (int j=0;j<(1<<n);j++) M(MMH+=mmh[j]);
printf("%d\n",MMH);
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: