牛客题单_动态规划课程状压dp习题

文章目录

  • 牛客题单_动态规划课程状压dp习题
    • NC14732 锁
    • NC15034 德玛西亚万岁
    • NC16418 宝藏
    • NC17061 多彩的树
    • NC17890 方格填色
    • NC20485 [ZJOI2009]多米诺骨牌

NC14732 锁

大意:

有n名居民, 他们每人有一个重要度。房间的门上可以装若干把锁。假设共有k把锁,命名为1到k。每把锁有一种对应的钥匙,也用1到k表示。钥匙可以复制并发给任意多个居民。每个居民持有若干钥匙,也就是1到k的一个子集。规定一组居民都在场时能打开房门当且仅当他们的重要度加起来至少为m。问至少需要给房间装多少把锁。即,求最小的k,使得可以适当地给居民们每人若干钥匙(即一个1到k的子集),使得任意重要度之和小于m的居民集合持有的钥匙的并集不是1到k,而任意重要度之和大于等于m的居民集合持有的钥匙的并集是1到k。

思路:

当某个集合的重要度的总和没有到达m,但是再加上任意一个人,他们的重要度就能满足要求。

我们假设这个集合缺少一把钥匙,我们求出所有的这样的集合,使得这些集合都缺少一把不同的钥匙,此时所有满足这样条件的集合数量即为所需要的锁的数量了。

#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 5;
typedef long long LL;
LL n, m, dp[1 << 25], a[N];
int main() {cin >> n >> m;for (int i = 0; i < n; i++) cin >> a[i];LL num = (1 << n) - 1;LL res = 0;for (LL i = 0; i <= num; i++) {int flag = 1;for (int j = 0; j < n; j++) {if(!(i&(1<<j))){dp[i + (1 << j)] = dp[i] + a[j];if (dp[i + (1 << j)] < m) flag = 0;}}if(flag&&(dp[i]<m)){res++;}}cout << res << endl;return 0;
}

NC15034 德玛西亚万岁

模板题,和acwing327玉米田一样

#include <bits/stdc++.h>using namespace std;const int N = 20 + 5;
typedef long long LL;
int n, m;
int mp[N];
LL dp[N][1 << 13];
const LL mod = 100000000;
bool check(int state) {if ((state >> 1) & state)return false;elsereturn true;
}int main() {while (cin >> n >> m) {memset(dp, 0, sizeof dp);memset(mp, 0, sizeof mp);for (int i = 1; i <= n; i++) {for (int j = 0; j < m; j++) {int t;cin >> t;mp[i] += (!t << j);}}vector<int> st;st.clear();for (int i = 0; i < (1 << m); i++)if (check(i)) {st.push_back(i);}vector<int> state[1 << 13];for (int i = 0; i < st.size(); ++i) {state[i].clear();for (int j = 0; j < st.size(); ++j) {int a = st[i], b = st[j];if ((a & b

牛客题单_动态规划课程状压dp习题相关推荐

  1. 牛客网Chino with Queue【状压DP】

    Chino的数学很差,因此Cocoa非常担心.今天,Cocoa准备教Chino和排队有关的问题. 我们总是会学各种排列组合的问题,那些题目大多数都是套路.而Cocoa不喜欢套路. 通常来说,每个人在排 ...

  2. 牛客网 德玛西亚万岁 状压DP

    德玛西亚万岁 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史.这里非常重视正义.荣耀.职责的意识形态,这里的人民为此感到强烈自豪.有一天他们想去制裁邪恶的比尔吉沃特,于是派遣了自己最优 ...

  3. 【动态规划】状压dp:蓝桥2020补给(旅行商问题)

    问题可以转换为: 从0出发途径每个城市至少一次返回0求最短路径: 解法:动态规划(状压dp)+Floyd预处理最短路径(从一个城市到另一个城市走最短路即可,不需考虑途径什么城市) [动态规划笔记]状压 ...

  4. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

  5. 牛客题单——同余、并查集

    题单链接 Strange Way to Express Integers(表示整数的奇怪方式) 这道题之前已经写过了,不重复写了,下面是链接 中国剩余定理 程序自动分析 这道题很明显是用并查集解决的 ...

  6. 状压dp之二之三 炮兵阵地/玉米田 By cellur925

    一.简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ ...

  7. ABC 215 E - Chain Contestant (状压DP)

    链接 题意: 给出一个只包括A~J的字符串,定义一种子序列为:在这个子序列中,相同的字符必定连续出现,求出这样的子序列有多少个. 数据范围:字符串长度1 <= n <= 1000 分析: ...

  8. 牛客题霸 单链表的选择排序 C++题解/答案

    牛客题霸 单链表的选择排序 C++题解/答案 题目描述 给定一个无序单链表,实现单链表的选择排序(按升序排序). 题解: 不可能手写排序,这辈子不可能手写排序.. 基础的链表操作,将链表内的数据存到v ...

  9. 牛客题霸 [ 孩子们的游戏] C++题解/答案

    牛客题霸 [ 孩子们的游戏] C++题解/答案 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样 ...

最新文章

  1. 如何破解汽车-快速的速成课程
  2. MySQL读写分离一主多从实现
  3. 如何使用Tmux提高终端环境下的效率
  4. 性能是.NET Core的一个关键特性
  5. java locale.us_JAVA实现国际化
  6. Leetcode刷题(2)回文数
  7. Nginx配置location及rewrite规则
  8. 【mfc】vs2019创建MFC基于对话框的项目没有插入任何代码运行报错:0xC0000005:读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突
  9. CocoaAsyncSocket
  10. nodepad代码格式复制到word发布到博客
  11. linux查看命令源rpm,Linux rpm查询命令以及RPM包验证
  12. 计算机软件考试初级什么好考,初级程序员好考吗
  13. Learning Transferable Visual Models From Natural Language Supervision
  14. [小技巧] git: Your branch and 'origin/master' have diverged
  15. mysql优化 个人笔记 (mysql锁机制 ) 非礼勿扰 -m10
  16. Vue生命周期,mounted,destory,beforedestory,updated,
  17. PM Q7声卡使用教程
  18. 04-0006 MATLAB 弹幕壁纸
  19. idea中tomcat项目修改Module名之后修改配置信息
  20. 5. 文件上传下载 与 db数据库

热门文章

  1. Mac中允许任何来源的app安装
  2. 【LOJ#570】Misaka Network 与任务
  3. 阿里与Google间的PK
  4. Chrome浏览器-vue调试工具dev-tools安装
  5. Android Support 包的作用、用法
  6. 距离金九银十只有最后的40天、你该如何蓄力冲刺金九银十
  7. SocketTools .NET Edition 11.0 Crack
  8. echarts html ajax,ECharts+Ajax动态加载数据实例(.NET)
  9. 五项措施,让阿里云存储更安全
  10. 网易微博用户数5677万 与邮箱打通实现整合