ZOJ 3931 Exact Compression
题目看了半小时才看懂的。
题意:首先根据给出的序列,构造出哈夫曼树,构造出来的是一棵二叉树,每个节点都有一个权值,每个节点的两个儿子只能取一个,问能否使取出来的节点权值之和刚好等于e。
这样一分析就很容易看出是01背包。但是,背包容量特别大!不能纯粹的用循环做背包肯定会超时。可以使用两个队列存能够凑出来的数字(相当于滚动数组的作用),还有一个优化,看当前要压入队列的数字是否已经在队列中,这个可以用map存一下。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<algorithm>
using namespace std; const int maxn=;
int s;
long long e;
long long f[maxn];
struct X
{
long long a,b;
} u[maxn];
int Size,cnt;
map<long long,bool>flag; struct cmp
{
bool operator ()(long long &a,long long &b)
{
return a>b;
}
}; int main()
{
int T; scanf("%d",&T);
while(T--)
{
flag.clear();
scanf("%d",&s);
cnt=;
priority_queue<long long,vector<long long>,cmp>q;
for(int i=; i<=s; i++)
{
scanf("%lld",&f[i]);
q.push(f[i]);
}
scanf("%lld",&e);
Size=s;
while(Size!=)
{
u[cnt].a=q.top();
q.pop();
Size--;
u[cnt].b=q.top();
q.pop();
Size--;
q.push(u[cnt].a+u[cnt].b);
cnt++;
Size++;
} queue<long long>Q1;
queue<long long>Q2;
int f=;
Q1.push(u[].a);
Q1.push(u[].b); for(int i=; i<cnt; i++)
{
flag.clear();
if(f==)
{
while(!Q1.empty())
{
if(Q1.front()+u[i].a<=e&&flag[Q1.front()+u[i].a]==){
Q2.push(Q1.front()+u[i].a);
flag[Q1.front()+u[i].a]=;
}
if(Q1.front()+u[i].b<=e&&flag[Q1.front()+u[i].b]==){
Q2.push(Q1.front()+u[i].b);
flag[Q1.front()+u[i].b]=;
}
Q1.pop();
}
f=;
}
else
{
while(!Q2.empty())
{
if(Q2.front()+u[i].a<=e&&flag[Q2.front()+u[i].a]==){
Q1.push(Q2.front()+u[i].a);
flag[Q2.front()+u[i].a]=;
}
if(Q2.front()+u[i].b<=e&&flag[Q2.front()+u[i].b]==){
flag[Q2.front()+u[i].b]=;
Q1.push(Q2.front()+u[i].b);
}
Q2.pop();
}
f=;
}
} bool ans=; if(f==)
{
while(!Q1.empty())
{
if(Q1.front()==e) ans=;
Q1.pop();
}
}
else
{
while(!Q2.empty())
{
if(Q2.front()==e) ans=;
Q2.pop();
}
} if(ans) printf("Yes\n");
else printf("No\n");
}
return ;
}
ZOJ 3931 Exact Compression的更多相关文章
- 01背包 ZOJ 3931 Exact Compression
题目连接 题意:n个数字构建哈夫曼树,问是否存在这样一棵树使得:(Fi数字大小,Ci哈夫曼表示下,'0'的数量) 分析:每次从优先队列取出两个数字可以互换位置,这样可以01互换.设a[i] <= ...
- Types of compression algorithms
http://www.html5rocks.com/en/tutorials/speed/img-compression/ Types of compression algorithms There ...
- hdu 4424 & zoj 3659 Conquer a New Region (并查集 + 贪心)
Conquer a New Region Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- ZOJ 2477 Magic Cube(魔方)
ZOJ 2477 Magic Cube(魔方) Time Limit: 2 Seconds Memory Limit: 65536 KB This is a very popular gam ...
- zoj 2081 BFS 延迟标记 读入问题
Mission Impossible Time Limit: 2 Seconds Memory Limit: 65536 KB ...
- ZOJ 3349 Special Subsequence
Special Subsequence Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Ori ...
- Dancing Links and Exact Cover
1. Exact Cover Problem DLX是用来解决精确覆盖问题行之有效的算法. 在讲解DLX之前,我们先了解一下什么是精确覆盖问题(Exact Cover Problem)? 1.1 Po ...
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
- BZOJ 3931: [CQOI2015]网络吞吐量
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1555 Solved: 637[Submit][Stat ...
随机推荐
- phpStudy环境配置多个站点,绑定域名
经常做网站的朋友,往往要在自已的电脑同时建立多个站点,而phpstudy这款软件就能很好的解决这个问题,大家看下图 点击上图中的 其它选项菜单 ,就会弹出下面的对话框,然后点击 站点域名管理 然 后在 ...
- php 编程效率(1)
用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中 ...
- spring jdbc 源码
类:org.springframework.jdbc.core.JdbcTemplate public <T> T execute(PreparedStatementCreator psc ...
- Mac系统Git生成ssh公钥
Mac系统Git生成ssh公钥 在使用Git仓库进行代码管理时,新的电脑上往往需要生成ssh公钥进行匹配,Mac系统生成Git公钥过程如下: 1.检查本机是否已有公钥 在终端中输入如下命令: ? 1 ...
- word2010无法打开文件时的一点对策
word2010无法打开文件时的一点对策 1. Word 安全模式启动,点击「开始」,在搜索栏中输入winword /safe并回车,测试问题是否依然存在? 2. 正常启动Word,点击“文件”—“选 ...
- gameUnity 0.15alpha 网络游戏框架
在重要版本 0.2之前,先 出一个 0.15alpha 版本热热身. 0.15主要是添加了 动画事件 和一些 动画特效的类,比如快进,慢进,(类似被冰冻效果),但这些都不在这个 alpha版本中出现 ...
- div里面的margin-top失效
div标签中的元素margin-top失效的解决方法 元素上级标签是div,已经设置了width和height等的属性,可是,在对元素使用margin进行调整的时候,无法生效,下面有个不错的解决方法, ...
- UVA - 10048 Audiophobia (Floyd应用)
题意:求出两点之间所有路径最大权值的最小值. 思路:转变一下Floyd的形式即可: 注意:注意初始化问题,还有UVA奇葩的输出形式. 代码如下: #include<iostream> #i ...
- Chapter 1 First Sight——23
I stared because their faces, so different, so similar, were all devastatingly, inhumanly beautiful. ...
- L4,an exciting trip
expressions: a great number of 许多 in the centre of 在…的中部 sentences: I have just had breakfast. I hav ...