「JSOI2010」找零钱的洁癖

传送门

个人感觉很鬼的一道题。。。

首先我们观察到不同的数最多 \(50\) 个,于是考虑爆搜。

但是这样显然不太对啊,状态数太多了。

然后便出现了玄学操作:

\(\text{BFS}\) 的过程中,如果队列中的元素太多了(具体多少我也搞不清)就不搜了,相当于卡时。

但这样又可能会WA,然后就贪心一下就好了???

我反正是不知道为什么可以

可以看这篇博客

参考代码:

#include <algorithm>
#include <cstdio>
#include <queue>
#include <map>
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
using namespace std; const int _ = 1000002; int aim, n, a[_], ans, now;
map < int, bool > M;
queue < pair < int, int > > Q; int main() {
#ifndef ONLINE_JUDGE
file("cpp");
#endif
scanf("%d", &aim);
while (scanf("%d", &a[++n]) != EOF) ; --n;
ans = 0x3f3f3f3f;
sort(a + 1, a + n + 1);
Q.push(make_pair(0, 0)), M[0] = 1;
while (!Q.empty()) {
pair < int, int > x = Q.front(); Q.pop();
if (x.first == aim) { ans = x.second; break ; }
for (rg int xx, i = 1; i <= n; ++i) {
if (x.first < aim && !M[xx = x.first + a[i]]) M[xx] = 1, Q.push(make_pair(xx, x.second + 1));
if (x.first > aim && !M[xx = x.first - a[i]]) M[xx] = 1, Q.push(make_pair(xx, x.second + 1));
}
if (Q.size() > 1000000) break ;
}
if (ans != 0x3f3f3f3f) { printf("%d\n", ans); return 0; }
ans = 0, now = aim;
for (rg int i = n; i >= 1; --i) {
if (a[i] == 0) continue ;
ans += now / a[i];
now -= now / a[i] * a[i];
}
printf("%d\n", ans);
return 0;
}

「JSOI2010」找零钱的洁癖的更多相关文章

  1. 题解 JSOI2010 找零钱的洁癖

    题解 JSOI2010 找零钱的洁癖 题面 BZOJ 个人体会 van全没有思路... 只能去看题解... 还是个bfs+贪心 不管怎样竟然乱搞过了... 听M_sea小姐姐说她有更正经的做法(线性规 ...

  2. 「JSOI2010」排名

    「JSOI2010」排名 传送门 看到先后顺序限制和字典序,很容易想到拓扑排序 + 贪心. 考虑具体做法: 对于第一问: 我们开一个大根堆来代替队列,然后从大到小构造出各个元素的排名. 我们连边 \( ...

  3. 「JSOI2010」挖宝藏

    「JSOI2010」挖宝藏 传送门 由于题目中说道挖一个位置的前提是挖掉它上面的三个,以此类推可以发现,挖掉一个点就需要挖掉这个点往上的整个倒三角,那么也就会映射到 \(x\) 轴上的一段区间(可以发 ...

  4. 「JSOI2010」旅行

    「JSOI2010」旅行 传送门 比较妙的一道 \(\text{DP}\) 题,思维瓶颈应该就是如何确定状态. 首先将边按边权排序. 如果我们用 \(01\) 串来表示 \(m\) 条边是否在路径上, ...

  5. 【LOJ】#2064. 「HAOI2016」找相同字符

    题解 做后缀自动机题要一点脑洞,脑洞一开,就过了 我们显然要拿第二个串跑第一个串的后缀自动机 我们可以求出第二个串每个位置匹配到的节点,和匹配的长度L 那么我们统计一个后缀树上的根缀和,表示这样个节点 ...

  6. LG4171/BZOJ1823 「JSOI2010」满汉全席 2-SAT

    问题描述 LG4171 BZOJ1823 题解 显然,每个评委对每个材料的满式/汉式要求是对\(n\)个元素的\(0,1\)取值限制. 显然想到\(\mathrm{2-SAT}\) 于是就可以切掉了. ...

  7. 「JSOI2010」满汉全席

    前言 由于蒟蒻才刚开始学 \(\text{2-SAT}\),所以题解中有的地方可能不够精炼,望多包涵! 题目描述 题目意思很简单,标准的\(\text{2-SAT}\)问题模型.那么我们就先来介绍一下 ...

  8. 「HAOI2016」找相同字符

    知识点: SA,线段树,广义 SAM 原题面 Loj Luogu 给定两字符串 \(S_1, S_2\),求出在两字符串中各取一个子串,使得这两个子串相同的方案数. 两方案不同当且仅当这两个子串中有一 ...

  9. 「AHOI2013」 差异

    知识点: SA,线段树,单调栈 原题面 Loj Luogu 题意简述 给定一长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示从第 \(i\) 个字符开始的后缀,求: \[\sum_{ ...

随机推荐

  1. The Reason Why Cosmetic Airless Bottles Are Widely Used

    The contents of the Cosmetic Airless Bottles    can be isolated from the air, to prevent the product ...

  2. 计算几何-多边形内核判定-HPI-poj3335

    This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. 先解决一个问题, ...

  3. 微信个人支付接口---YunGouOS 1.1.3 版本发布,新增个人微信/支付宝收款接口

    软件接口  https://www.oschina.net/news/113305/yungouos-1-1-3-released 文档说明  https://www.oschina.net/p/Yu ...

  4. JSP技术(三)

    JSP指令 指令是JSP语法元素的第一种类型.它们指示JSP转换器如何翻译JSP页面为Servlet.JSP定义了多个指令,但只有page和include最重要.而taglib.tag.attribu ...

  5. Docker - 命令 - docker container

    概述 整理 docker 容器的命令 1. 分类(25个) 查看 ls diff logs inspect port stats top 生命周期 pause prune create kill re ...

  6. Go并发介绍

    1. 进程.线程.协程 进程(Process),线程(Thread),协程(Coroutine,也叫轻量级线程) 进程 进程是一个程序在一个数据集中的一次动态执行过程,可以简单理解为“正在执行的程序” ...

  7. 洛谷 P3901 数列找不同(莫队)

    题目链接:https://www.luogu.com.cn/problem/P3901 这道题简单莫队模板题,然后$add$和$del$分别处理$vis[]$从$0-->1$和从$1--> ...

  8. Re(正则表达式)库入门

    一.正则表达式的概念 正则表达式 "一行胜千言" regular expression regex RE 是用来简洁表达一组字符串的表达式. 'PN' 'PYN' 'PYTN' & ...

  9. linux内存查看、清理、释放命令

    echo 1 > /proc/sys/vm/drop_caches 清理前 # free -h total used free shared buffers cached Mem: 19G 19 ...

  10. cordova将vue项目打包成apk

    1,若vue项目不在cordova项目里,直接把它复制进来,避免改动代码的麻烦 2,直接按照以下链接进行操作即可 链接:https://www.cnblogs.com/qirui/p/8421372. ...