原题地址:http://codeforces.com/problemset/problem/417/D

题意:

Gena 为了解决m个问题,请他的朋友们帮忙,其中第i个朋友可以解决某mi个问题,需要花费xi卢布,并且要求安装至少ki个显示器,每个显示器需要b卢布。

问解决所有问题需要多少多少卢布

题解

考虑问题数目很小,可以状压DP。

dp[S]表示当前状态的最优解,通过位运算进行转移。

考虑|没有逆运算,所以只能正推更新。

首先把朋友按照k排序,避免k的干扰。

dp[][0]和dp[][1]分别表示考虑显示器花费和不考虑显示器花费的最小值

#include<bits/stdc++.h>#define clr(x,y) memset((x),(y),sizeof(x))using namespace std;
typedef long long LL;const int maxn=(1<<20);
const LL inf=2e18;struct Node
{LL x,k,m;int S;bool operator < (const Node& a) const{return k<a.k;}
};LL dp[maxn+5][2];
Node f[105];LL n,m,b;int main(void)
{#ifdef exfreopen ("../in.txt","r",stdin);//freopen ("../out.txt","w",stdout);#endifscanf("%I64d%I64d%I64d",&n,&m,&b);for (int i=1;i<=n;++i){scanf("%I64d%I64d%I64d",&f[i].x,&f[i].k,&f[i].m);int q;for (int j=1;j<=f[i].m;++j){scanf("%d",&q);--q;f[i].S=f[i].S|(1<<q);}}sort(f+1,f+1+n);int S=(1<<m)-1;dp[0][0]=0;dp[0][1]=0;for (int i=1;i<=S;++i)for (int j=0;j<=1;++j)dp[i][j]=inf;for (int i=1;i<=n;++i){//printf("%d\n",f[i].S);for (int j=S;j>=0;--j){if (dp[j][0]==inf) continue;int tS=j|f[i].S;dp[tS][0]=min(dp[tS][0],dp[j][0]+f[i].x);dp[tS][1]=min(dp[tS][1],dp[j][0]+f[i].x+f[i].k*b);//printf("%d %d %d\n",tS,i,dp[tS][1]);
        }}if (dp[S][1]==inf) printf("-1\n");else printf("%I64d\n",dp[S][1]);
}

转载于:https://www.cnblogs.com/123-123/p/5797028.html

codeforce 417D Cunning Gena (状压DP)相关推荐

  1. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  2. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  3. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

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

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

  5. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

  6. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  7. 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)

    题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...

  8. P2340 奶牛会展(状压dp)

    P2340 奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由 ...

  9. UVa 11825 (状压DP) Hackers' Crackdown

    这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...

  10. bzoj1402 Ticket to Ride 斯坦纳树 + 状压dp

    给定\(n\)个点,\(m\)条边的带权无向图 选出一些边,使得\(4\)对点之间可达,询问权值最小为多少 \(n \leqslant 30, m \leqslant 1000\) 首先看数据范围,\ ...

最新文章

  1. oracle 2018 版本,Oracle 最新版本变化 转帖
  2. 数据结构源码笔记(C语言):线性表的单链表示
  3. 在一个解决方案中用C#测试调用C++ DLL
  4. 为什么程序员都不喜欢使用switch,而是大量的 if……else if ?
  5. Android基础 EventBus3 0实用教程
  6. http请求中的Query String Parameters、Form Data、Request Payload
  7. 博客文章列表(二)——算法、数据结构、数据库、ABCD
  8. 学习理发去哪里_学习美发去哪里学
  9. LeetCode 1300. 转变数组后最接近目标值的数组和(二分查找)
  10. oracle 取整点的数据,Oracle SQL语句操作数字:取整、四舍五入及格式化
  11. matlab table中的文字转string_MATLAB_GUI_教程(2)pushbutton
  12. get post put delete在vue中传参方式
  13. (一)phoneGap之环境搭建教程及其example分析
  14. 裘宗燕:C/C++ 语言中的表达式求值
  15. 终端 ssh 上传文件_记一次将文件添加到github
  16. 从os.cpus()来分析nodejs源码结构
  17. 在线开启mysql慢查询
  18. 少年时期最后一个儿童节
  19. 【计算机视觉】【并行计算与CUDA开发】GPU硬编码
  20. Microsoft SQL Server Management Studio的快捷功能 与 搜狗五笔冲突记

热门文章

  1. mysql 统计当个用户从当前时间连续登录天数,以及多用户某时间段,最长连续登录天数查询
  2. 【2021最后一波官方福利】七天玩转Redis | 打卡还能领周边活动开始啦
  3. 基于Vue.js的2048小游戏的设计与实现
  4. android自定义rx库,Android下载库(OkHttp3+Retrofit2+RxJava2)
  5. 候选码、主码、外码、全码、超码
  6. CSAPP 存储器山数据的测量以及绘制,Cache lab part A:Cache simulator
  7. 【实用教程】本地blast使用及简单python脚本辅助
  8. 04_python爬虫爬取超星回放
  9. c语言中用梯形法求定积分
  10. cadence SPB17.4 - 中文UI设置