题意:
      一个人做汉堡包,每个汉堡包有自己的花费和价值,某些汉堡包必须是在其他的某些汉堡包已经做好了的前提下才能制作,给你这个人的初始钱数,问最大的价值是多少。

思路:

      比较简单的一个题目,首先我们开一个数组dp[i]表示i状态(状态压缩)时的最大价值,把每一个状态都用这n个汉堡包更新一下,还的开个数组money[i]表示的是i状态是的剩余钱数,更新的时候记住一点就是每个点只能用一次,也就是当前状态里如果有i这个点,那么i不能在来更新了。


#include<stdio.h>
#include<string.h>

int dp[1<<16];
int cost[20] ,vie[20];
int money[1<<16];
int limit[20][20];int maxx(int x ,int y)
{return x > y ? x : y;
}bool ok(int ii ,int now)
{for(int i = 1 ;i <= limit[ii][0] ;i ++)if(!(now & (1 << (limit[ii][i] - 1)))) return 0;return 1;
}int main ()
{int t ,n ,m ,i ,j;scanf("%d" ,&t);while(t--){scanf("%d %d" ,&n ,&m);for(i = 1 ;i <= n ; i++)scanf("%d" ,&vie[i]);for(i = 1 ;i <= n ;i ++)scanf("%d" ,&cost[i]);for(i = 1 ;i <= n ;i ++){scanf("%d" ,&limit[i][0]);for(j = 1 ;j <= limit[i][0] ;j ++)scanf("%d" ,&limit[i][j]);}for(i = 0 ;i <= (1 << n) - 1 ;i ++)dp[i] = -1000000000 ,money[i] = 0;dp[0] = 0 ,money[0] = m;int Ans = 0;for(i = 0 ;i <= (1<<n) - 1 ;i ++)for(j = 1 ;j <= n ;j ++){if(i & (1 << (j - 1))) continue;int now = i|(1<<(j-1));if(dp[now] < dp[i] + vie[j] && money[i] >= cost[j] && ok(j ,i)){dp[now] = dp[i] + vie[j];Ans = maxx(dp[now] ,Ans);money[now] = money[i] - cost[j];}}printf("%d\n" ,Ans);}return 0;
}

hdu3182 状态压缩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的最小花费 ...

最新文章

  1. 数据库MYSQL学习系列三
  2. FCN制作自己的数据集、训练和测试 caffe
  3. 我的android studio
  4. object not found php,找不到PHP错误对象
  5. [unity3d]自定义鼠标指针
  6. authware课件
  7. 【运筹学】表上作业法 ( 运输规划问题最优解分析 | 退化与非退化 )
  8. 《金字塔原理》读书笔记(全)
  9. pacpng文件格式说明
  10. 工具 | CAN总线数据采集工具PCAN的使用教程
  11. PDF文件太大,如何将它压缩得更小一点?
  12. Java StackTraceElement源码总结 StackTraceElement源码注释翻译和解析中英文对照版
  13. 方维直播Android打包流程
  14. 为 “超级大脑”构建支撑能力,腾讯云聚焦AI技术落地
  15. WebRTC源码分析四:视频模块结构
  16. vue使用file-saver本地文件导出
  17. 速学TypeScript-精简划重点手册-上册
  18. 二本跨考985计算机考研,跨专业考研经验谈:从二本到985的飞跃
  19. Unity官方案例噩梦射手开发总结<一> 角色的攻击功能实现
  20. Python的基本语法(十一)(持续更新)

热门文章

  1. 火墙之firewalld
  2. Tomcat 8熵池阻塞变慢详解
  3. memcached的基本命令(安装、卸载、启动、配置相关)
  4. 在51aspx收集的农历日期类
  5. BZOJ3709: [PA2014]Bohater
  6. input type=file change事件只触发一次
  7. php源码编译常见错误解决方案大全
  8. SVG 基本绘图方法总结
  9. hibernate一级缓存和二级缓存的区别[转]
  10. 《Shell脚本学习指南》第一章 背景知识