题目描述
糖果店的老板一共有 M 种口味的糖果出售。为了方便描述,我们将 M 种 口味编号 1 ∼ M。

小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而 是 K 颗一包整包出售。

幸好糖果包装上注明了其中 K 颗糖果的口味,所以小明可以在买之前就知 道每包内的糖果口味。

给定 N 包糖果,请你计算小明最少买几包,就可以品尝到所有口味的糖 果。

输入
第一行包含三个整数 N、M 和 K。
接下来 N 行每行 K 这整数 T1, T2, · · · , TK,代表一包糖果的口

输出
一个整数表示答案。如果小明无法品尝所有口味,输出 −1。

样例输入
6 5 3
1 1 2
1 2 3
1 1 3
2 3 5
5 4 2
5 1 2
样例输出
2
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ N ≤ 20 。
对于所有评测样例,1 ≤ N ≤ 100,1 ≤ M ≤ 20,1 ≤ K ≤ 20,1 ≤ Ti ≤ M。
垃圾dotcpp网站,连数据量都没有。。
思路:M我们可以发现很小,那么就可以用二进制的形式去表示每一包糖果代表的数字,例如样例:
1 1 2->1 1 0 0 0
1 2 3->1 1 1 0 0
1 1 3->1 0 1 0 0
2 3 5->0 1 1 0 1
5 4 2->0 1 0 1 1
5 1 2->1 1 0 0 1
这样我们就可以用一个数字来代表每一包糖果的状态。最终要求的状态也就是(样例)1 1 1 1 1了。
状压dp的状态转移方程:

代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e2+10;
const int maxm=1<<21;
int dp[maxm];
int val[maxx];
int n,m,k;int main()
{scanf("%d%d%d",&n,&m,&k);memset(dp,-1,sizeof(dp));memset(val,0,sizeof(val));int x;for(int i=1;i<=n;i++){for(int j=1;j<=k;j++){scanf("%d",&x);x--;val[i]|=(1<<x);}dp[val[i]]=1;}int top=(1<<(m))-1;for(int i=1;i<=n;i++){for(int j=0;j<=top;j++){if(dp[j]==-1) continue;else if(dp[j|val[i]]==-1) dp[j|val[i]]=dp[j]+dp[val[i]];else dp[j|val[i]]=min(dp[j|val[i]],dp[j]+dp[val[i]]);}}printf("%d\n",dp[top]);return 0;
}

努力加油a啊,(o)/~

[蓝桥杯][2019年第十届真题]糖果(状压dp)相关推荐

  1. [蓝桥杯][2019年第十届真题]扫地机器人(二分+贪心)

    题目描述 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示. 走廊内部署了 K 台扫地机器人,其中第 i 台在第 Ai 个方格区域中. 已知扫地机器人每分钟可以移动到左右相邻的方 ...

  2. [蓝桥杯][2019年第十届真题]修改数组(并查集)

    题目描述 给定一个长度为 N 的数组 A = [A1, A2, · · · AN ],数组中有可能有重复出现 的整数. 现在小明要按以下方法将其修改为没有重复整数的数组.小明会依次修改 A2,A3,· ...

  3. [蓝桥杯][2019年第十届真题]等差数列

    题目描述 数学老师给小明出了一道等差数列求和的题目.但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数. 现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有 几项? 输入 ...

  4. [蓝桥杯][2019年第十届真题]外卖店优先级(模拟)

    题目描述 "饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0. 每经过 1 个时间单位,如果外卖店没有订单 ...

  5. [蓝桥杯][2019年第十届真题]后缀表达式(正解!!)

    题目描述 给定 N 个加号.M 个减号以及 N + M + 1 个整数 A1, A2, · · · , AN+M+1,小 明想知道在所有由这 N 个加号.M 个减号以及 N + M + 1 个整数凑出 ...

  6. [蓝桥杯][2019年第十届真题c/c++B组]迷宫(寻找路径bfs及文件输入输出)

    试题 E: 迷宫 1.问题描述 2.思路详解 3.AC代码 1.问题描述 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方. 010000 000100 00100 ...

  7. [蓝桥杯][2019年第十届真题c/c++B组]后缀表达式(解释sum -= 2*a[i])

    后缀表达式 给定 N 个加号.M 个减号以及 N + M + 1个整数 A1 , A2 , · · · , AN+M+1 ,小明想知道在所有由这 N 个加号.M 个减号以及 N + M + 1个整数凑 ...

  8. [蓝桥杯][2019年第十届真题c/c++B组]完全二叉树的权值

    题目描述 给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下.从左到右的顺序依次是 A1, A2, · · · AN,如下图所示: 现在小明要把相同深度的节点的权值加在一起, ...

  9. [蓝桥杯][2019年第十届真题]-----外卖店优先级

    题目描述: "饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0. 每经过 1 个时间单位,如果外卖店没有订 ...

最新文章

  1. 【JUC并发编程13】异步回调
  2. GPU Gems2 - 2 使用基于GPU几何体裁剪图的地形渲染(Terrain Rendering Using GPU-Based Geometry Clipmaps)
  3. python简单爬虫课题_VS2019python爬虫入门
  4. 在网页中的flash游戏,按方向键浏览器的滚动条会跟着滚动
  5. Springboot定时任务原理及如何动态创建定时任务
  6. 如何选择一个Linux发行版本
  7. JAVA岗位比嵌入式岗位_java嵌入式职业选择?
  8. Javascript第四章定义函数的形式、回调函数第五课
  9. yum 安装jenkins
  10. C++ 类型转换归纳
  11. 钉钉/企业微信对接用友T+生成财务凭证准备资料
  12. mac safari 下载pdf
  13. 串行通信:常见的串行通信接口协议UART、SPI、I2C简介
  14. QStyleOption类型
  15. 《中国历代著名文学家评传》目录
  16. 第一台超高速巨型电子计算机,1997年,( )巨型机的研制成功,使我国在这个领域跨入了世界先进行列。...
  17. matlab光学几何光学模拟,matlab在几何光学仿真 实验中的应用.doc
  18. Bullet 物理引擎 简析[1]
  19. 浏览器F12(开发者调试工具) 功能介绍
  20. 2021年P气瓶充装考试题及P气瓶充装考试内容

热门文章

  1. Object-C基础入门笔记(一)
  2. 在Win10删除Ubuntu时直接删除分区后,如何删除启动项(EFI)
  3. python和php互动_PHP中常见的五种设计模式
  4. mysql中索引类型索引方法_MYSQL索引的类型和索引的方式
  5. endl、flush、ends、unitbuf、nounitbuf区别及详解
  6. linux bond 脚本,Linux--网卡聚合简单脚本(bond0)(示例代码)
  7. 职场上个人的核心技术_在职场上,一定要让自身强大起来!
  8. Vue eslint 团队代码规范
  9. bzoj 2763 [JLOI2011]飞行路线——分层图
  10. 《Spring揭秘》——IOC梳理2(容器启动,bean生命周期)