当前位置: 首页 > news >正文

AT_abc404_d [ABC404D] Goin#39; to the Zoo 题解

题目传送门

题目大意

AtCoder 国家有 N N N 个动物园,编号为 1 1 1 N N N。动物园 i i i 的门票是 C i C_i Ci 日元。

铃木先生喜欢 M M M 种动物,动物 1 , … , M 1,\dots,M 1,,M
动物园 K i K_i Ki,即动物园 A i , 1 , … , A i , K i A_{i,1},\dots,A_{i,K_i} Ai,1,,Ai,Ki 可以看到动物 i i i

求观看所有 M M M 种动物每种至少两次所需的最低门票总额。
如果你多次游览同一个动物园,那么那里的动物就被视为每次游览都能看到一次。

解题思路

注意到 1 ≤ n ≤ 10 1\leq n \leq 10 1n10,所以考虑直接爆搜。

我们枚举第 i i i 种动物园游玩 0 , 1 , 2 0,1,2 0,1,2 次,然后最后统计每种动物是否都看到了 2 2 2 次及以上,与答案取一个最小值即可。

CODE:

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m, c[20], a[110][10], k[110], cnt[110];
int ans = 1e18;
inline void dfs(int step, int x) {if (step == n + 1) {for (int i = 1; i <= m; i++) {int res = 0;for (int j = 1; j <= k[i]; j++)res += cnt[a[i][j]];if (res < 2) {return;}}ans = min(ans, x);return;}for (int t = 0; t <= 2; t++) {int nc = x + t * c[step];if (nc >= ans) {return;}cnt[step] = t;dfs(step + 1, nc);cnt[step] = 0;}
}
signed main() {ios::sync_with_stdio(false);ios_base::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> c[i];}for (int i = 1; i <= m; i++) {cin >> k[i];for (int j = 1; j <= k[i]; j++) {cin >> a[i][j];}}dfs(1, 0);cout << ans;return 0;
}

相关文章:

  • sockaddr_in
  • 洛谷-P1957 口算练习题
  • leetcode0409. 最长回文串-easy
  • linux中使用make clean重新编译
  • Python网络编码——聊天小工具
  • 写给这个阶段自我的一封信
  • TDengine 中集群维护
  • [闲谈]C语言的面向对象
  • ES6基础
  • 华为OD机试_2025 B卷_欢乐的周末(Python,100分)(附详细解题思路)
  • ACM模式中输入输出的处理
  • Linux中的SELinux
  • UE C++学习笔记之按键绑定
  • 解码词向量:让AI语言模型更透明
  • 在 Windows 上使用 WSL 安装 Ansible详细步骤
  • 蚂蚁TuGraph图数据库行业落地,开启数据处理新“视界”
  • 如何利用 Spring Data MongoDB 进行地理位置相关的查询?
  • H310昂达等主板无法开机自启的原因
  • SD-WAN与传统网络结合:轨道交通网络优化的高效实践与深度解析
  • ARM架构
  • 网站建设详细需求说明书/今日国内新闻大事20条
  • 做商城网站需要办理什么/如何制作网站链接
  • 沈阳网站外包公司/十种营销方式
  • 郑州注册网站/推广目标怎么写
  • 团购网站大全/镇江网站建设方案
  • 电子商务网站建设与维护期末答案/今日财经新闻