「JSOI2010」找零钱的洁癖
「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」找零钱的洁癖的更多相关文章
- 题解 JSOI2010 找零钱的洁癖
题解 JSOI2010 找零钱的洁癖 题面 BZOJ 个人体会 van全没有思路... 只能去看题解... 还是个bfs+贪心 不管怎样竟然乱搞过了... 听M_sea小姐姐说她有更正经的做法(线性规 ...
- 「JSOI2010」排名
「JSOI2010」排名 传送门 看到先后顺序限制和字典序,很容易想到拓扑排序 + 贪心. 考虑具体做法: 对于第一问: 我们开一个大根堆来代替队列,然后从大到小构造出各个元素的排名. 我们连边 \( ...
- 「JSOI2010」挖宝藏
「JSOI2010」挖宝藏 传送门 由于题目中说道挖一个位置的前提是挖掉它上面的三个,以此类推可以发现,挖掉一个点就需要挖掉这个点往上的整个倒三角,那么也就会映射到 \(x\) 轴上的一段区间(可以发 ...
- 「JSOI2010」旅行
「JSOI2010」旅行 传送门 比较妙的一道 \(\text{DP}\) 题,思维瓶颈应该就是如何确定状态. 首先将边按边权排序. 如果我们用 \(01\) 串来表示 \(m\) 条边是否在路径上, ...
- 【LOJ】#2064. 「HAOI2016」找相同字符
题解 做后缀自动机题要一点脑洞,脑洞一开,就过了 我们显然要拿第二个串跑第一个串的后缀自动机 我们可以求出第二个串每个位置匹配到的节点,和匹配的长度L 那么我们统计一个后缀树上的根缀和,表示这样个节点 ...
- LG4171/BZOJ1823 「JSOI2010」满汉全席 2-SAT
问题描述 LG4171 BZOJ1823 题解 显然,每个评委对每个材料的满式/汉式要求是对\(n\)个元素的\(0,1\)取值限制. 显然想到\(\mathrm{2-SAT}\) 于是就可以切掉了. ...
- 「JSOI2010」满汉全席
前言 由于蒟蒻才刚开始学 \(\text{2-SAT}\),所以题解中有的地方可能不够精炼,望多包涵! 题目描述 题目意思很简单,标准的\(\text{2-SAT}\)问题模型.那么我们就先来介绍一下 ...
- 「HAOI2016」找相同字符
知识点: SA,线段树,广义 SAM 原题面 Loj Luogu 给定两字符串 \(S_1, S_2\),求出在两字符串中各取一个子串,使得这两个子串相同的方案数. 两方案不同当且仅当这两个子串中有一 ...
- 「AHOI2013」 差异
知识点: SA,线段树,单调栈 原题面 Loj Luogu 题意简述 给定一长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示从第 \(i\) 个字符开始的后缀,求: \[\sum_{ ...
随机推荐
- Sql 中获取年月日时分秒的函数
getdate():获取系统当前时间 dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新时间值,比如:dateadd(yy,30,getdate()) ...
- 在mac上进行JAVA开发
一. JDK 的下载与安装 终端输入java看看有没有安装java: 见到此弹窗,说明没有安装呀! 点击oracle官网链接: http://www.oracle.com/technetwork/j ...
- sqli-libs(46-53关)
Less_46 补充知识:MySQL知识 SQL语句中,asc是指定列按升序排列,desc则是指定列 按降序排列: Select * from users order by 1 desc; 使用降序进 ...
- leetcode 25. K 个一组翻转链表
# coding:utf-8 __author__ = "sn" """ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返 ...
- python 网页中文显示Unicode码
print repr(a).decode("unicode–escape") 注:a是要输出的结果,
- 分析AppClassLoader,ExtClassLoader 和URLClassLoader 的关系
测试代码: class Hello { public String str = "Hello World"; public void fun() { System.out.prin ...
- 利用ZotFile对Zotero中的文献进行整理
1.安装ZotFile插件 *** 以后补充 *** 2.配置ZotFile 配置 3.整理操作 (1)将文件拖进Zotero软件相应的目录(自己创建) (2)查看文件位置 (未整理之前) (3)整理 ...
- Python学习之Craps赌博游戏篇
在此先安利一波大佬的Python学习项目地址:https://github.com/jackfrued/Python-100-Days 这些天一直在看着大佬的项目学习Python,这是第五天循环学习完 ...
- Mac系统中桌面图片和用户头像图片的路径
系统中的桌面图片: /Library/Desktop Pictures/ 用户头像图片: 根目录资源库/user pictures/ 参考: [https://bbs.feng.com/read-ht ...
- openresty-component
1.Array Var Nginx Module ArrayVarNginxModulelocation /foo { array_split ',' $arg_files to=$array; # ...