酱神寻宝

Time Limit: 20 Sec

Memory Limit: 256 MB

题目连接

http://acm.uestc.edu.cn/#/problem/show/1141

Description

酱神来到了一座小岛,岛上有n个箱子。

一共有3中不同的钥匙,金钥匙、银钥匙和万能钥匙。酱神一开始有a把金钥匙、b把银钥匙和c把万能钥匙。

第i个箱子上有xi把金锁,yi把银锁。金钥匙只能打开金锁,银钥匙只能打开银锁,万能钥匙两种锁都能打开。用于打开锁的钥匙会立刻损坏,酱神会丢掉损坏的钥匙。箱子里有ai把金钥匙、bi把银钥匙和ci把万能钥匙,想要取出箱内的钥匙必须要打开这xi+yi把锁。

酱神的目的是使他拥有的钥匙总数最多。一旦酱神认为自己已经拥有了最多的钥匙,他就不会去开剩下的箱子了。

Input

第一行一个数n。

接下来有n行。每行5个数,xi,yi,ai,bi,ci。

最后一行3个数a,b,c。

1=<n<=15

0=<xi,yi,ai,bi,ci,a,b,c<=10

Output

输出一个数酱神的最多钥匙数。

Sample Input

3
1 0 0 0 1
2 4 0 8 0
3 9 10 9 8
3 1 2

Sample Output

8

HINT

题意

题解:

状压dp,借用一个贪心的思想,每次能用A就用A,不能再用万能钥匙

啊,用的bfs实现的

代码:

//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define test freopen("test.txt","r",stdin)
#define maxn 2000001
#define mod 10007
#define eps 1e-9
int Num;
char CH[];
const int inf=0x3f3f3f3f;
const ll infll = 0x3f3f3f3f3f3f3f3fLL;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void P(int x)
{
Num=;if(!x){putchar('');puts("");return;}
while(x>)CH[++Num]=x%,x/=;
while(Num)putchar(CH[Num--]+);
puts("");
}
//**************************************************************************************
struct Box
{
int a,b,c,d,e;
}box[]; struct node
{
int a,b;
}; int dp[<<][];
int main()
{
//test;
int n=read();
for(int i=;i<n;i++)
box[i].a=read(),box[i].b=read(),box[i].c=read(),box[i].d=read(),box[i].e=read();
int aa=read(),bb=read(),cc=read();
memset(dp,-,sizeof(dp));
dp[][aa]=cc;
queue<node>q;
q.push((node){,aa});
int ans=;
while(!q.empty())
{
node now=q.front();
q.pop();
int all=aa+bb+cc;
for(int i=;i<n;i++)
{
if(now.a>>i&)
{
all+=box[i].c+box[i].d+box[i].e-box[i].a-box[i].b;
}
}
ans=max(ans,all);
int nowa=now.b,nowc=dp[now.a][now.b],nowb=all-nowa-nowc;
//cout<<all<<" "<<nowa<<" "<<nowb<<" "<<nowc<<endl;
for(int i=;i<n;i++)
{
if(!(now.a>>i&))
{
if(nowa>=box[i].a)
{
if(nowb>=box[i].b)
{
if(nowc+box[i].e>dp[now.a|(<<i)][nowa-box[i].a+box[i].c])
{
dp[now.a|(<<i)][nowa-box[i].a+box[i].c]=nowc+box[i].e;
q.push((node){now.a|(<<i),nowa-box[i].a+box[i].c});
}
}
else if(nowc+nowb>=box[i].b)
{
if(nowc+box[i].e-box[i].b+nowb>dp[now.a|(<<i)][nowa-box[i].a+box[i].c])
{
dp[now.a|(<<i)][nowa-box[i].a+box[i].c]=nowc+box[i].e-box[i].b+nowb;
q.push((node){now.a|(<<i),nowa-box[i].a+box[i].c});
}
}
}
else if(nowa+nowc>=box[i].a)
{
int sp=nowc-box[i].a+nowa;
if(nowb>=box[i].b)
{
if(nowc+box[i].e-box[i].a+nowa>dp[now.a|(<<i)][box[i].c])
{
dp[now.a|(<<i)][box[i].c]=nowc+box[i].e-box[i].a+nowa;
q.push((node){now.a|(<<i),box[i].c});
}
}
else if(sp+nowb>=box[i].b)
{
if(sp+box[i].e-box[i].b+nowb>dp[now.a|(<<i)][box[i].c])
{
dp[now.a|(<<i)][box[i].c]=sp+box[i].e-box[i].b+nowb;
q.push((node){now.a|(<<i),box[i].c});
}
}
}
}
}
}
cout<<ans<<endl;
}

cdoj 1141 酱神寻宝 状压dp的更多相关文章

  1. 【XSY2524】唯一神 状压DP 矩阵快速幂 FFT

    题目大意 给你一个网格,每个格子有概率是\(1\)或是\(0\).告诉你每个点是\(0\)的概率,求\(1\)的连通块个数\(\bmod d=0\)的概率. 最开始所有格子的概率相等.有\(q\)次修 ...

  2. CDOJ 1402 三角形棋盘上的博弈游戏 状压DP

    三角形棋盘上的博弈游戏 题目连接: http://mozhu.today/#/problem/show/1402 Description 柱爷有天上课无聊,于是和同桌卿学姐一起下一种奇特的棋: 棋盘如 ...

  3. HITOJ 2662 Pieces Assignment(状压DP)

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

  4. hdu 4739 状压DP

    这里有状态压缩DP的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过. 2.状压DP,先 ...

  5. hdu 3247 AC自动+状压dp+bfs处理

    Resource Archiver Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Ot ...

  6. HDU 1074 Doing Homework【状压DP】

    Doing Homework Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he ...

  7. 【BZOJ3590】[Snoi2013]Quare 状压DP

    这道题...神题. 首先看到数据范围,一眼状压 dp .然后? 没了. 理性分析,这里说断掉任意一条边图依然连通,即整个图构成一个边双(而不是点双). 之前用 fire (机房里的随机算法总称)之所以 ...

  8. 状压dp的另一种形式

    做的那么多都是一些比较怎么说呢,都是在数网格一类的题目之中,这些题目有些有点固定的套路,而一些需要状态压缩的题目呢,则么是真正对状态转移的考验. 这道题呢,被彻底打脸了,以后一定要任性一点一道题做不出 ...

  9. Codeforces 429C Guess the Tree(状压DP+贪心)

    吐槽:这道题真心坑...做了一整天,我太蒻了... 题意 构造一棵 $ n $ 个节点的树,要求满足以下条件: 每个非叶子节点至少包含2个儿子: 以节点 $ i $ 为根的子树中必须包含 $ c_i ...

随机推荐

  1. devexpress datagrid 与imageEdit以及如何存图片到数据库 z

    http://blog.csdn.net/haoyujie/article/details/41277703 首先建立了一个数据库的表,这个表中,有一个字段是image类型(SQL Server数据库 ...

  2. js动画框架设计

    当你不再依赖JQuery时,当你已经厌倦了引入js类库实现一些动画效果的方式,当你想实现一个简单而实用的动画框架......下面介绍下愚人设计的动画框架:支持动画缓动算法函数,如Linear.Cubi ...

  3. 《C陷阱与缺陷》读书笔记

    1. 词法“陷阱” = 不同于 == , 可以通过if( 1 == a )来避免 & | 不同于 && || 词法分析中的“贪心法” 编译器将程序分解成符号的方法是,从左到右一 ...

  4. hadoop的ganglia数据监控

    如果我们想知道当前运行的hadoop集群的状态,可以通过hadoop的客户端和web页面来获得,但是如果我们想知道当前集群的繁忙程度,如读写次数,这些工具就办不到了.幸运的是hadoop提供了一种ga ...

  5. Windows Azure 设置虚拟机静态外网IP地址

    官方说法叫做“虚拟公共IP地址保留”,为容易理解,我们称之为静态外网IP地址. 如果在国内使用国际版Windows Azure服务时强烈推荐为虚拟机设置IP地址保留. 由于Windows Azure ...

  6. TortoiseGit's Settings

    将鼠标停放在Settings-TortoiseGit窗体上的editbox,checkbox上,有些会弹出有用的提示信息. 2.35.1. General settings: 设定自己偏好的语言,Gi ...

  7. hadoop 异常及处理总结-01(小马哥-原创)

    试验环境: 本地:MyEclipse 集群:Vmware 11+ 6台 Centos 6.5 Hadoop版本: 2.4.0(配置为自动HA) 试验背景: 在正常测试MapReduce(下简称MR)程 ...

  8. HBase应用场景

    适用场景 列族结构经常调整 高并发写入 结构化数据及半结构化数据 Key-Value存储 有序存储 固定集合(多版本) 定时删除记录(TTL)   不适用场景 事务 join,union,groupb ...

  9. fedora 16安装ByPass四网口网卡遇到的问题

    这个问题困扰了好几天,今天终于在大谷歌的帮助下,在这个网站http://blog.bwysystems.com/bwysystems/?p=16上找到了答案!还是国外的技术论坛强,在百度上搜遍了也没有 ...

  10. oracle学习 一 (持续更新中)

    首先你需要创建一个表空间,然后,再创建一个用户名,用户名要给他指定一个表空间,并且给这个用户赋予权限, DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构. RESOURCE:拥有 ...