zoukankan      html  css  js  c++  java
  • HDUZZY的爱好

    由于只有最多16种组合情况,所以就直接暴力枚举求解。这里题目有个要求就是按照字典序相对较小的输出规则输出,那么我们可以想到在兴趣数相同的情况下要不要去更新最优值,这就牵涉到我们刚开始的时候求解出来的解是否一定是字典序最小的,或则最后求解出来的解就是字典序最小的,我是采用压缩后的二进制数的最高位代表最小的兴趣,所以从最高位通过自减操作能够保证每次得到的该兴趣数的第一个解都是字典序最小的。

    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int N, M, req[25], rec[20][25], cpy[25];
    
    bool judge(int sta, int &many)
    {
        many = 0;
        memset(cpy, 0, sizeof (cpy));
        for (int i = 0; i < M; ++i) {
            if ((1 << i) & sta) {  // x 状态选取了这个物品
                ++many;
                for (int j = 1; j <= N; ++j) {
                    cpy[j] += rec[M-i][j];
                }
            }
        }
        for (int i = 1; i <= N; ++i) {
            if (cpy[i] < req[i]) {
                return false;
            }
        }
        return true;
    } 
    
    int main()
    {
        int LIM, Max, many, ret;
        while (scanf("%d", &N) == 1) {
            Max = ret = 0;
            for (int i = 1; i <= N; ++i) {
                scanf("%d", &req[i]);
            }
            scanf("%d", &M);
            for (int i = 1; i <= M; ++i) {
                for (int j = 1; j <= N; ++j) {
                    scanf("%d", &rec[i][j]);
                }
            }
            LIM = 1 << M;  // M个物品,M中属性
            for (int i = LIM-1; i >= 0; --i) {
                if (judge(i, many) && many > Max) {
                    Max = many;
                    ret = i;
                }
            }
            printf("%d", Max);
            for (int i = M-1; i >= 0; --i) {
                if ((1 << i) & ret) {
                    printf(" %d", M-i);
                }
            }
            puts("");
        }
        return 0;
    }
  • 相关阅读:
    Lifegame第一阶段任务
    软件工程 第一次实验 Git代码版本管理
    个人作业——软件工程实践总结&个人技术博客
    个人技术总结-Android hellocharts折线图
    结对第二次作业——某次疫情统计可视化的实现
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    第六次作业
    第五次作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/Lyush/p/2617685.html
Copyright © 2011-2022 走看看