zoukankan      html  css  js  c++  java
  • SRM 600 div 2 T 2

    题意:给你50个数,问你最少去掉多少数能使得剩下的数不可能具备子集S,OR起来为goal

    如果一个数不是goal的子状态,那么我们没必要删除他,所以我们只关心goal的子状态的数

    1:如果所有的数OR起来都没有到达goal,那么就是0

    2:每个数都会贡献一些位,去掉1的个数最少的那一位就好了

    #include <bits/stdc++.h>
    using namespace std;

    class ORSolitaireDiv2
    {
    public:
    int getMinimum(vector <int>, int);
    };
    int ORSolitaireDiv2::getMinimum(vector <int> numbers, int goal)
    {
        int ans = 33, cnt = 0;
        bool f[33];
        memset(f,false,sizeof(f));
        for (int i = 0; i < 33; i ++)
            if (!(goal & (1 << i))){
                for (int j = 0; j < numbers.size(); j ++)
                    if (numbers[j] & (1 << i))
                        f[j] = true;
            }
        for (int i = 0; i < 33; i ++)
            if (goal & (1 << i)){
                cnt = 0;
                for (int j = 0; j < numbers.size(); j ++)
                    if ((numbers[j] & (1 << i)) && !f[j])
                        cnt ++;
                ans = min(ans, cnt);
            }
    cnt = 0;
    for(int i = 0;i < numbers.size(); i++)
    if (f[i])
                cnt ++;
    ans = min((int)numbers.size() - cnt, ans);
    return ans;
    }
  • 相关阅读:
    深入了解css的行高Line Height属性
    【C++】函数指针
    【C++】常用知识点
    将数字转化为液晶显示屏的样子
    【多媒体】PCM
    【Android】网络下载图片&SD卡文件存储
    CPU 缓存(Cache)
    【C++】typename
    【多媒体】音频格式
    【Android】图片的异步加载
  • 原文地址:https://www.cnblogs.com/wjnclln/p/9558686.html
Copyright © 2011-2022 走看看