首页 > 其他分享 >AcWing1362 健康的荷斯坦奶牛(二进制枚举)

AcWing1362 健康的荷斯坦奶牛(二进制枚举)

时间:2022-10-05 17:34:39浏览次数:80  
标签:荷斯坦 int ++ v2 v1 枚举 vector AcWing1362

原题链接

思路 : 二进制枚举

因为数据量很小,数据只有25和15,因此二进制枚举妥妥的
需要注意的是题目中要求下标从1开始,后面记录的时候如果开始是从0开始的记得+1

小tips

c++中将一个vector里的东西复制给另一个vector,可以像下面一样(都是将v1赋值给v2)
vector<int> v2(v1);
或者是

vector<int> v2;
v2.assign(v1.begin(), v1.end());

或者是

vector<int> v1;
v2.swap(v1);

或者是

vector<int>::iterator it;// 声明迭代器
for(it = v1.begin(); it!=v1.end(); it++) { // 遍历v1,赋值给v2
     v2.push_back(it);
}

代码

/**

  • @Author: chelly
  • @Date: 2022-10-05 16:45:11
  • 二进制枚举
    */

include <bits/stdc++.h>

define pb push_back

define fi first

define se second

define all(x) (x).begin(), (x).end()

define SZ(x) (int) (x).size()

using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
typedef vector VI;
typedef double db;

int v, cv[30], g, cg[20][30], tmp[30], cnt, res = 0x3f3f3f3f;
VI path;
void solve() {
cin >> v;
for (int i = 0; i < v; i++) cin >> cv[i];
cin >> g;
for (int i = 0; i < g; i++)
for (int j = 0; j < v; j++)
cin >> cg[i][j];
for (int i = 0; i < (1 << g); i++) { // 枚举饲料选择情况
memset(tmp, 0, sizeof(tmp));
cnt = 0;
VI tpath;
for (int j = 0; j < g; j++) { // 枚举饲料
if ((i >> j) & 1) {
tpath.pb(j+1); // 注意,题目中的下标从1开始
for (int k = 0; k < v; k++) {
tmp[k] += cg[j][k];
}
cnt++;
}
}
bool norm = 1;
for (int j = 0; j < v; j++) {
if (tmp[j] < cv[j]) {
norm = 0;
break;
}
}
if (norm) {
if (res > cnt) {
path = VI(tpath); // 将tpath的值赋给path
res = cnt;
}
}
}
cout << res << ' ';
for (auto &a: path) cout << a << ' ';
}

int main() {
ios::sync_with_stdio(false);
cin.tie(0);
solve();
return 0;
}

标签:荷斯坦,int,++,v2,v1,枚举,vector,AcWing1362
From: https://www.cnblogs.com/chelly-algorithm/p/16755951.html

相关文章

  • 补档--【THM】Subdomain Enumeration(子域名枚举)-学习
    简介子域名枚举是为一个域查找有效子域的过程,在本节中我们将学习发现子域的各种方法,我们这样做是为了扩大我们的攻击面,试图发现更多潜在的漏洞点。我们将探讨三种不同的......
  • 枚举和迭代器
    枚举器枚举器是指一个参数类型,有MoveNext()方法和Current属性,MoveNext方法可以将枚举器的游标指向下一个元素,Current属性存储着游标当前指向的参数。可以使用GetEnu......
  • POJ 2110 Mountain Walking(二分 枚举 BFS)
    POJ2110MountainWalking(二分枚举BFS)题目:​ 给出一张\(n*n(n\le100)\)的地图,每个点都有一个点权\((val\le110)\),可以任意选择路径,请问从(1,1)走到(n,n)的路......
  • Java SE 宋红康 days04-高级篇-枚举类
    1.自定义枚举类a.声明类A对象的属性:private final修饰b.私有化类的构造器,并给对象属性赋值c.提供当前枚举类的多个对象:public static final......
  • C语言的enum(枚举)
    一、enum的语法格式为:enum枚举名{枚举元素1,枚举元素2,……}; 二、用enum代替define繁琐的定义1、繁琐的define定义:#defineMON1#defineTUE2#defineW......
  • 传统优化方法:枚举法、启发式算法和搜索算法
    1.枚举法枚举出可行解集合内的所有可行解,以求出精确最优解。对于连续函数,该方法要求先对其进行离散化处理,这样就可能因离散处理而永远达不到最优解。当枚举空间比较大时......
  • Flask 学习-81.Flask-RESTX使用reqparse 解析器校验枚举类型choices 参数
    前言reqparse.RequestParser()解析器可以校验枚举类型,在add_argument中使用choices参数choices设置参数可选值比如性别设置可选项:男、女defpost(self):......
  • protobuf入门教程(五):枚举(enum)、包(package)
    枚举(enum)消息格式当需要定义一个消息类型的时候,可能想为一个字段指定某“预定义值序列”中的一个值,这时候可以通过枚举实现。syntax="proto3";//指定版本信息,不指定会报......
  • C++11:强类型枚举
    C++11引入了一种新的枚举类型,即“枚举类”,又称“强类型枚举”。声明请类型枚举非常简单,只需要在enum后加上使用class或struct。如:enumOld{Yes,No};//oldstyl......
  • Java枚举类Demo
    Java枚举类案例 packagecom.loit.common.enums;​​/***@authorzhaokz*@date2022/9/7*编码枚举*/publicenumCodeEnum{​  /**  *性别  */......