[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;
}

原文地址:https://www.cnblogs.com/ggy778/p/12231368.html

时间: 2024-11-02 16:11:53

[USACO][枚举]Healthy Holsteins的相关文章

USACO Section 2.1 Healthy Holsteins

/* ID: lucien23 PROG: holstein LANG: C++ */ #include <iostream> #include <fstream> #include <vector> using namespace std; bool compFun(int x, int y) { int temp, i = 0; while (true) { temp = 1 << i; if (temp&x > temp&y) {

2.1.4 Healthy Holsteins 健康的好斯坦奶牛

2.1.4 Healthy Holsteins 健康的好斯坦奶牛 一.题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命量,输出喂给牛需要哪些种类的饲料,且所需的饲料剂量最少. 维他命量以整数表示,每种饲料最多只能对牛使用一次,数据保证存在解. PROGRAM NAME: holstein INPUT FORMAT 第1 行:一个整数V(1<=V<

USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】

holstein解题报告 ------------------------------------------------------------------------------------------------------------------------------------------------[题目] 你需要给一头奶牛制定最优的喂养计划. 有V种维他命,每天对于每种维他命,牛都有需要达到的指标: 同时你有G种饲料,编号依次为1到G,每种维他命在每种饲料中所蕴含的量都会给你.

usaco Healthy Holsteins

题意为有一头牛,它每天所需的维生素有V种,每种维生素的需求量给出,同时给出G种已知的饲料,求如何组合这些饲料可以使得牛获得足够的维生素: 给的数据范围很小,直接暴力枚举所有 /* ID: modengd1 PROG: holstein LANG: C++ */ #include <iostream> #include <stdio.h> #include <memory.h> using namespace std; int V,G,food[15][1000],cow

【USACO 2.1】Healthy Holsteins

/* TASK: holstein LANG: C++ URL: http://train.usaco.org/usacoprob2?a=SgkbOSkonr2&S=holstein SOLVE: con[i][j]为食物i含有维生素j的量,ned[i]为需要的维生素i的量 bfs,用二进制保存状态 */ #include<cstdio> #define N 30 int v,g,ned[N],con[N][N]; int now[N]; int l,r,q[40000]; bool

USACO Healthy Holsteins DFS

使用排列组合,遍历所有可能的情况C(1)+C(2)+C(3)……C(n)= 2^G种组合 数据规模不大,暴力过去最多也就是2^15 = 23768种情况 所以就暴力咯,不过还是Debug了一会 Source Code: /* ID: wushuai2 PROG: holstein LANG: C++ */ //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h> #i

洛谷P1460 健康的荷斯坦奶牛 Healthy Holsteins

题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命量,输出喂给牛需要哪些种类的饲料,且所需的饲料剂量最少. 维他命量以整数表示,每种饲料最多只能对牛使用一次,数据保证存在解. 输入输出格式 输入格式: 第1行:一个整数V(1<=V<=25),表示需要的维他命的种类数. 第2行:V个整数(1<=每个数<=1000),表示牛每天需要的每种

洛谷P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins

题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命量,输出喂给牛需要哪些种类的饲料,且所需的饲料剂量最少. 维他命量以整数表示,每种饲料最多只能对牛使用一次,数据保证存在解. 输入输出格式 输入格式: 第1行:一个整数V(1<=V<=25),表示需要的维他命的种类数. 第2行:V个整数(1<=每个数<=1000),表示牛每天需要的每种

USACO-Section 2.1 Healthy Holsteins (状态压缩DFS)

描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命量,输出喂给牛需要哪些种类的饲料,且所需的饲料剂量最少. 维他命量以整数表示,每种饲料最多只能对牛使用一次,数据保证存在解. 格式 PROGRAM NAME: holstein INPUT FORMAT: (file holstein.in) 第1行:一个整数V(1<=V<=25),表示需要的维他命的