题意是这种     给你n个汉堡     每一个汉堡有它的价值   做每一个汉堡都得花费相应的能量      如今告诉你最大能量 让你求获得的最大的价值(有些汉堡必须有还有一些汉堡做好为前提)

给你的n你最大为15

这道题的重点在于   每一个汉堡仅仅能做一次      跑遍所以的状态      mark记录每一个状态下所剩余的能量  dp数组记录每一个状态下的获得的最大的价值

#include<stdio.h>

#include<string.h>

#include<iostream>

using namespace std;





int value[20],cost[20],need[20][20],n,m;









int mark[1<<16],dp[1<<16];

int Max(int a,int b)

{

return a>b?a:b;

}

int main()

{

int T,i,j,a,b;

scanf("%d",&T);

while(T--)

{

scanf("%d%d",&n,&m);

for(i=1;i<=n;i++)

{

scanf("%d",&value[i]);

}

for(i=1;i<=n;i++)

scanf("%d",&cost[i]);

memset(need,0,sizeof(need));

for(i=1;i<=n;i++)

{

scanf("%d",&need[i][0]);

for(j=1;j<=need[i][0];j++)

{

scanf("%d",&need[i][j]);

}

}

memset(mark,0,sizeof(mark));

for(i=0;i<(1<<n);i++)

      dp[i]=-10000000;

      dp[0]=0;

      mark[0]=m;

int flash,k=0,x;

for(i=0;i<=(1<<n)-1;i++)

{   

for(j=1;j<=n;j++)

{

x=(1<<(j-1));

if(i&x) continue;

int now=i|(1<<(j-1));

flash=0;

for(int t=1;t<=need[j][0];t++)

{

if(!(i&(1<<((need[j][t])-1)))) {flash=1;break;}

}

if(!flash&&dp[now]<dp[i]+value[j]&&mark[i]>=cost[j])

{

mark[now]=mark[i]-cost[j];

dp[now]=dp[i]+value[j];

k=Max(dp[now],k);

}

}

}

printf("%d\n",k);

}

return 0;

}

hdu3182 状态压缩水题的更多相关文章

  1. hdu 2167(状态压缩基础题)

    题意:给你一个矩阵,让你在矩阵中找一些元素使它们加起来和最大,但是当你使用某一个元素时,那么这个元素周围的其它八个元素都不能取! 分析:这是一道比较基础的状态压缩题,也是我做的第三道状态压缩的题,但是 ...

  2. hdu 1565(状态压缩基础题)

    题意:容易理解. 分析:这是我做的状态压缩第二题,一开始超内存了,因为数组开大了,后来超时了,因为能够成立的状态就那么多,所以你应该先把它抽出来!!总的来说还是比较简单的!! 代码实现: #inclu ...

  3. POJ 2923 状压好题

    Relocation Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2631   Accepted: 1075 Descri ...

  4. poj 3254(状态压缩基础题)

    题意:就是你给一个n行m列的矩阵,矩阵里的元素由0和1组成,1代表肥沃的土地可以种植作物,0则不可以种植作物,并且相邻的土地不能同时种植作物,问你有多少种种植方案. 分析:这是我做的第一道状态压缩dp ...

  5. hdu4064 三进制状态压缩 好题!

    还不太会做这类题,总之感觉有点难啊. 用深搜代替打表求出一行所有的可行状态,注意要进行剪枝 这是自己理解的代码,但是tle了 #include<bits/stdc++.h> using n ...

  6. poj1185 状态压缩经典题

    状态压缩的好题,直接求会爆内存,先把所有可能的状态求出来存在stk里,然后f[i][k][t]表示i行状态为t,i-1状态为k,由i-1状态来推出i状态即可 注意要打好边际条件的状态,并且某个可行状态 ...

  7. 模拟赛毒瘤状压DP题:Kronican

    Kronican 内存限制:32 MiB 时间限制:2000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: cqbzgm 题目描述 Mislav有N个无限体积的杯子,每一个杯子中都 ...

  8. Traveling by Stagecoach 状态压缩裸题

    Traveling by Stagecoach dp[s][v]  从源点到达  v,状态为s,v的最小值.  for循环枚举就行了. #include <iostream> #inclu ...

  9. 【状压基础题】poj3254 Corn Fields

    题目大意 :农夫约翰有n*m块地,其中一些地荒掉了.玉米是一种傲娇的植物,种在相邻的地里会导致不孕不育.求所有种法数对100000000求余. 读入:第一行一个n一个m, 接下来是一个n行m列的矩形, ...

随机推荐

  1. 散文说python半篇——景观三元论与盖茨比的对话

    今天, 天气晴朗,风和日丽: 我事实上在说谎-- 爱说谎事实上是我的天性 上个礼拜四我就用景观三元论说了非常多谎话.然后一头大象自己上吊了. 了不起的大象啊,盖茨比也要从坟墓里爬出来了吧, 陈年旧事, ...

  2. Android采用Application总结一下

    什么是 Application Application和Activity,Service由于是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象.用 ...

  3. commons.net.telnet使用示例

    import org.apache.commons.net.telnet.TelnetClient; import java.io.IOException; public class TelnetDe ...

  4. 深入理解Tomcat系列之二:源码调试环境搭建(转)

    前言 最近对Tomcat的源码比较感兴趣,于是折腾了一番.要调试源码首先需要搭建环境,由于参考了几篇帖子发现都不怎么靠谱,最后还是折腾出来了,然而却花了足足一天的时间去搭建这个环境.发现都不是帖子的问 ...

  5. Win32 Windows编程 十

    一 Windows画图 1 图形绘制 1.1 图形绘制的方式 获取到画图的句柄,设备描写叙述符(DC).使用对应的画图API.在设备上绘制图形 1.2 颜色 RGB,每种颜色8位,共24位颜色 32位 ...

  6. 低版本的 opencv库的 vs2010 打开 高版本opencv

    打开track.vcxproj文件, 注释掉跟版本有关的行就可. 本例子中,当用双击.sln用vs2010打开高版本的opencv项目时,会出现错误, 并且会有错误信息提示,双击该错误信息,就会打开该 ...

  7. httpcomponents-client-4.3.x DOC

    Chapter 1. Fundamentals Prev     Next Chapter 1. Fundamentals 1.1. Request execution The most essent ...

  8. 此文本文件包含的数据无法放置在一个工作表中 gb2312

    excel导入csv,csv要从unicode转为gb2312, 否则提示:此文本文件包含的数据无法放置在一个工作表中

  9. mongodb之java CRUD 简单操作

    我下载的是 mongo-2.8.0.jar — Version 2.8.0 打开mongo shell -- 新建数据库test --( use test) 打开eclipse新建工程,把junit, ...

  10. swift学习一:介绍,开发文档下载

    在今天wwdc2014公布会上.苹果今天公布了全新的编程语言Swift以及新版Xcode.对于开发人员来说,Swift包括了非常多开发人员喜欢的功能,能够与Objective-C和C语言共同工作.Sw ...