题目链接: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;
}

Codeforces 417D Cunning Gena(状态压缩dp)的更多相关文章

  1. codeforces 417D. Cunning Gena 状压dp

    题目链接 D. Cunning Gena time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. FZU 2165 v11(最小重复覆盖)+ codeforces 417D Cunning Gena

    告诉你若干个(<=100)武器的花费以及武器能消灭的怪物编号,问消灭所有怪物(<=100)的最小花费...当然每个武器可以无限次使用,不然这题就太水了╮(╯▽╰)╭ 这题当时比赛的时候连题 ...

  3. Codeforces C. A Simple Task(状态压缩dp)

    题目描述:  A Simple Task time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  4. Codeforces 4538 (状态压缩dp)Little Pony and Harmony Chest

    Little Pony and Harmony Chest 经典状态压缩dp #include <cstdio> #include <cstring> #include < ...

  5. hoj2662 状态压缩dp

    Pieces Assignment My Tags   (Edit)   Source : zhouguyue   Time limit : 1 sec   Memory limit : 64 M S ...

  6. POJ 3254 Corn Fields(状态压缩DP)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4739   Accepted: 2506 Descr ...

  7. [知识点]状态压缩DP

    // 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...

  8. HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP

    题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...

  9. DP大作战—状态压缩dp

    题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...

随机推荐

  1. 说说最小生成树(Minimum Spanning Tree)

    minimum spanning tree(MST) 最小生成树是连通无向带权图的一个子图,要求 能够连接图中的所有顶点.无环.路径的权重和为所有路径中最小的. graph-cut 对图的一个切割或者 ...

  2. 英特尔老款CPU支持虚拟化对照表(转)

    说明:一般来说新款的挤牙膏公司出的CPU都基本支持虚拟化,但不包括Atom系列的,也就是小主机低功耗机器使用的CPU. Intel® Virtualization Technology List YE ...

  3. OpenVPN分配静态IP以及同一网段内IP个数(64个)

    说明:简单的来说,同一网段内可用的IP数量只有64个:(不一定正确)最直接的解释就是每个客户端占用两个IP,因为根据IP掩码位/30得知可用的IP就是两个.对于为什么只有64个,下面是官方的解释. 解 ...

  4. golang 实现轻量web框架

    经常看到很多同学在打算使用go做开发的时候会问用什么http框架比较好.其实go的 http package 非常强大,对于一般的 http rest api 开发,完全可以不用框架就可以实现想要的功 ...

  5. C#编程(九)----------控制台I/O

    原文链接:http://blog.csdn.net/shanyongxu/article/details/46454985 控制台I/O 可以使用Console.ReadLine()方法从控制台中读取 ...

  6. js 日期相差的天数

    function DateDiff(sDate1, sDate2){ //sDate1和sDate2是2006-12-18格式 var aDate, oDate1, oDate2, iDays aDa ...

  7. windowsmobile 开发环境

    Windows Mobile 6开发环境的配置过程 需要的文件列表:1.Visual Studio 2005 Professional及更高的版本(Visual Studio 2005 Express ...

  8. utils/CCArmatureDefine

    #ifndef __CCARMATUREDEFINE_H__ #define __CCARMATUREDEFINE_H__ //#define _USRDLL 1 #include "coc ...

  9. UEFI+GPT引导基础篇 :什么是GPT,什么是UEFI?

    GUID Partition Table (GPT) is a standard for the layout of the partition table on a physical storage ...

  10. HBase目录

    1. HBase介绍及简易安装(转) 2. java操作Hbase实例 3. HBase入门基础教程之单机模式与伪分布式模式安装(转) 4. HBase教程 5. 用Java操纵HBase数据库(新建 ...