• [USACO][枚举]Healthy Holsteins


    题意:

    一包饲料有三种营养素含量,要求搭配饲料使得每种营养素累加之和不小于目标值。给出研究的营养素种类数目、每种营养素的目标值、备选饲料数目,以及每种饲料的营养素含量,求出最少选取多少饲料可以满足要求。(每个规格的饲料只能用一次)

    遇到的问题:

    * cpp重载运算符+我透啊好迷惑!找时间补补郭伟......
    * 问题都是简单的,不要总想着自己不会的东西,只要动脑一定可以解决!!
    * 呃...ostream&重载又又又忘记return os了......
    * 本题看起来背包其实是二进制枚举哒!

    代码:

    /*
    ID :ggy_7781
    TASK :holstein
    LANG :C++11
    */
    #include <bits/stdc++.h>
    
    using namespace std;
    #define maxV 29
    #define maxG 15
    
    int V,G;
    
    int target[maxV];
    int a[maxG][maxV];
    bool cmp(int a[], int b[])
    {
        for(int i = 0;i <V;i ++)
            if(a[i] > b[i])
            return false;
        return true;
    }
    int main()
    {
        freopen("holstein.in","r",stdin);
        freopen("holstein.out","w",stdout);
        cin>>V;
        for(int i =0 ;i < V;i ++)
            cin>>target[i];
        cin>>G;
        for(int i =0 ;i <G;i ++)
        {
            for(int j = 0;j < V;j ++)
            {
                cin>>a[i][j];
            }
        }
        int ret = G;
        int method = pow(2,G) - 1;
        for(int i = 1;i < pow(2,G);i ++)
        {
            int tmp = i;
            int now[maxV];
            for(int k = 0;k <V;k ++)
                now[k] = 0;
            int num = 0;
            for(int j = 0;j < G;j ++)
            {
                //cout<<(tmp & 1);
                if(tmp & 1)
                {
                    num ++;
                    for(int k = 0;k <V;k ++)
                        now[k] = now[k] + a[j][k];
                }
                tmp = tmp >> 1;
            }
            if(cmp(target,now) && num < ret)
            {
                ret = num;
                method = i;
            }
            //cout<<endl;
        }
        cout<<ret;
        int tmp = method;
        for(int i = 0;i < G; i++)
        {
            if(tmp & 1)
                cout<<" "<<i+1;
            tmp = tmp >> 1;
        }
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    简单对称加密
    temp
    标点符号
    PHP定时执行计划任务
    从杨致远辞去雅虎说起,那些衰落的网站巨头给我们的启示
    JS判断手机浏览器
    如何制作在线参考手册
    不是每个程序员都是适合创业,即使你工作了十年
    两级导航栏联动效果
    关于腾讯ip接口一个流传很广的错误用法
  • 原文地址:https://www.cnblogs.com/ggy778/p/12231368.html
Copyright © 2020-2023  润新知