题目链接:Codeforces 417D Cunning Gena

题目大意:n个小伙伴。m道题目,每一个监视器b花费,给出n个小伙伴的佣金,所须要的监视器数,以及能够完毕的题目序号。

注意,这里仅仅要你拥有的监视器数量大于小伙伴须要的监视器数量就可以。

求最少花费多少金额能够解决全部问题。

解题思路:dp[i],i为一个二进制数。表示完毕这些题目的最小代价,可是这里要注意,由于有个监视器的数量。普通情况下要开一个二维的状态。可是2^20次方有一百万,再多一维的数组会超内存,所以我的做法是将每一个小伙伴依照监视器的数量从小到达排序,慢慢向上加。

#include <cstdio>
#include <cstring>
#include <set>
#include <iostream>
#include <algorithm>using namespace std;typedef long long ll;
const int N = (1<<20)+5;
const int M = 105;
const ll INF = 0x3f3f3f3f3f3f3f3f;struct state {int s;ll k, val;
}p[M];
int n, m;
ll b, dp[N];bool cmp (const state& a, const state& b) {return a.k < b.k;
}void init () {memset(dp, -1, sizeof(dp));scanf("%d%d", &n, &m);cin >> b;int t, a;for (int i = 0; i < n; i++) {cin >> p[i].val >> p[i].k >> t;p[i].s = 0;for (int j = 0; j < t; j++) {scanf("%d", &a);p[i].s |= (1<<(a-1));}}sort(p, p + n, cmp);
}ll solve () {dp[0] = 0;int t = (1<<m)-1;ll ans = INF;for (int i = 0; i < n; i++) {for (int j = 0; j <= t; j++) {if (dp[j] == -1) continue;int u = p[i].s | j;if (dp[u] == -1)dp[u] = p[i].val + dp[j];else dp[u] = min(dp[u], p[i].val + dp[j]);}if (dp[t] != -1)ans = min(ans, dp[t] + p[i].k * b);}return ans == INF ? -1 : ans;
}int main () {init ();cout << solve() << endl;return 0;
}

转载于:https://www.cnblogs.com/brucemengbm/p/6705459.html

Codeforces 417D Cunning Gena(状态压缩dp)相关推荐

  1. 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)

    目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...

  2. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  3. BZOJ1688|二进制枚举子集| 状态压缩DP

    Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...

  4. hdu1074 状态压缩dp+记录方案

    题意:       给你一些作业,每个作业有自己的结束时间和花费时间,如果超过结束时间完成,一天扣一分,问你把n个作业完成最少的扣分,要求输出方案. 思路:       状态压缩dp,记录方案数的地方 ...

  5. FZU-2218 Simple String Problem(状态压缩DP)

    原题地址: 题意: 给你一个串和两个整数n和k,n表示串的长度,k表示串只有前k个小写字母,问你两个不含相同元素的连续子串的长度的最大乘积. 思路: 状态压缩DP最多16位,第i位的状态表示第i位字母 ...

  6. 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp

    文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...

  7. 状态压缩DP AcWing算法提高课 (详解)

    基础课的状态压缩点这里 基础课中 蒙德里安的梦想 属于 棋盘式状态压缩dp,最短Hamilton路径 属于 集合状态压缩dp 1064. 小国王(棋盘式/基于连通性) 这种棋盘放置类问题,在没有事先知 ...

  8. hdu 5067(状态压缩dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 解题思路:这道题开始想复杂了,想用bfs去求出最短距离,其实没必要,因为题目中没有阻碍关系,所以 ...

  9. hdu 5418(状态压缩dp+Floyd)

    点击打开链接 解题思路:这道题目和TSP问题很相似,唯一不同的是同一个点可以重复走几次.... 这道题目只有16个顶点,所以很容易想到状态压缩dp,dp[i][j]表示到达顶点i时的状态为j的最小花费 ...

  10. 状态压缩dp入门 第一题 POJ 3254 Corn Fields

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6460   Accepted: 3436 Descr ...

最新文章

  1. fileupload控件在ajax中无法使用
  2. Vue之Todolist案例和ES6语法
  3. SpringBoot开发案例之整合Dubbo分布式服务
  4. 【动态规划】农田个数 (ssl 1633)
  5. PDF文件如何转成markdown格式 1
  6. Java语言概述及常用DOS命令
  7. 安卓小课堂之:读写文件(内部存储)
  8. 课节6: 图神经网络进阶模型之 ERNIESage下
  9. 代码贡献受 Linux 之父亲自点名赞赏,酷派奖励员工 10 万股期权!
  10. WHATWG API——url.parse()的替代方案
  11. 汇编语言 第一单元 整理(补充)
  12. Word转PDF(SaveAsPDFandXPS + jacob)
  13. STM32入门之电路基础
  14. 38译码器和416译码器
  15. css 设置背景色渐变、字体颜色渐变
  16. Linux拨号上网后自动断开,Ubuntu 12.10 拨号上网及停用方法
  17. 服务器预防性维护检查表,高速公路机电系统预防性维护
  18. 用了三年teambition的我,为什么改用飞项了?
  19. Windows App开发之编辑文本与绘制图形
  20. 程序员需要了解的 现代散文精选翻译

热门文章

  1. Open SQL LEFT与RIGHT函数
  2. mount --bind作用与用法
  3. 神仙打架,2019注定是手机行业充满变革的一年
  4. const的小把戏。
  5. python怎么算积分_蒙特卡洛方法求定积分及python实现(转)
  6. 炼数成金深入BI - Kettle 篇
  7. “海青杯”复赛群雄逐鹿,凡科为青年创业翱翔插上翅膀
  8. 三种方法绘制单位圆-R语言
  9. c#运用——简体字转繁体字
  10. Notes弹窗查询异构系统数据库解决方案