• Atcoder Beginner Contest 147C(状态压缩)


    最多15个人,用N个二进制的数字表示每个人的状态,然后检验。这串数字相当于已经把这些人的状态定了下来,如果和输入的情况不符则这串数字不正确,直接忽略,因为枚举了所有的情况,所以总有正确的,不必在错误的状态下找寻正确的人数。

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 int a[17][17],b[17][17];
     5 int xx[17];
     6 int num[17];
     7 int n;
     8 int check(int x){
     9     memset(num,0,sizeof(num));
    10     int ans=0;
    11     int cnt=1;
    12     while(x){
    13         if(x&1){
    14             num[cnt]=1;
    15             ++ans;
    16         }
    17         x/=2;
    18         ++cnt;
    19     }
    20     int flag=0;
    21     for(int i=1;i<=n;++i){
    22         if(num[i]){
    23             for(int j=1;j<=xx[i];++j){
    24                 if(b[i][j]==1&&!num[a[i][j]])
    25                     flag=1;
    26                 else if(b[i][j]==0&&num[a[i][j]])
    27                     flag=1;
    28             }
    29         }
    30     }
    31     if(!flag)
    32         return ans;
    33     return 0;
    34 }
    35 int main(){
    36     ios::sync_with_stdio(false);
    37     cin.tie(NULL);
    38     cout.tie(NULL);
    39     cin>>n;
    40     for(int i=1;i<=n;++i){
    41         cin>>xx[i];
    42         for(int j=1;j<=xx[i];++j){
    43             cin>>a[i][j]>>b[i][j];
    44         }
    45     }
    46     int lastans=0;
    47     for(int i=0;i<=(1<<n)-1;++i)
    48         lastans=max(lastans,check(i));
    49     cout<<lastans;
    50     return 0;
    51 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    tips
    数学建模-预测模型优缺(搬运)
    数学建模-灰色预测模型GM(1,1)_MATLAB
    Floyd算法_MATLAB
    第二章 运算方法与运算器(浮点数的加减法,IEEE754标准32/64浮点规格化数)
    面向对象
    for循环
    if---else
    airflow的web任务管理
    airflow原理
  • 原文地址:https://www.cnblogs.com/ldudxy/p/12076125.html
Copyright © 2020-2023  润新知