题解 JSOI2010 找零钱的洁癖

题面

BZOJ

个人体会

van全没有思路...

只能去看题解...

还是个bfs+贪心

不管怎样竟然乱搞过了...

听M_sea小姐姐说她有更正经的做法(线性规划,网络流)?

解析

就是求最少的数加加减减得到\(X\).

考虑一波暴搜...

没了

开个map存一下当前的数经过没有.

最后和贪心比一下.

改错经历

一开始手写了一个Hash.

结果不知道为什么伪了...

然后用map过了...

另外还有数组开小(毕竟是搜索),循环边界写错导致RE的问题.

code

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <map>
#define ll long long
#define filein(a) freopen(a".cpp","r",stdin)
#define fileout(a) freopen(a".cpp","w",stdout);
using namespace std;

inline ll read(){
    ll sum=0,f=1;char c=getchar();
    while((c<'0'||c>'9')&&c!=EOF){if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9'&&c!=EOF){sum=sum*10+c-'0';c=getchar();}
    return sum*f;
}

const int N=1000003;
const int INF=0x7FFFFFFF;
int n;
ll X,c[N],s[N],a[N];
map<ll,bool> mp;

inline ll greedy(){
    ll ret=0,sum=X;
    for(int i=n;i;i--){
        if(!a[i]) continue;
        ret+=sum/a[i];
        sum-=sum/a[i]*a[i];
    }
    return sum? INF:ret;
}

inline ll bfs(){
    int hd=0,tl=1;
    s[1]=c[1]=0;
    while(hd<tl){
        hd++;
        for(int i=1;i<=n;i++){
            tl++;if(tl==N-22) return INF;
            s[tl]=s[hd]+1;
            c[tl]=c[hd]<X? c[hd]+a[i]:c[hd]-a[i];
            if(c[tl]==X) return s[tl];
            if(mp.count(c[tl])){tl--;continue;}
            mp[c[tl]]=1;
        }
    }
    return INF;
}

signed main(){
    X=read();
    while(scanf("%lld",&a[++n])!=EOF);
    sort(a+1,a+n+1);
    if(!X) puts("0");
    else printf("%lld\n",min(greedy(),bfs()));
    return 0;
}

题解 JSOI2010 找零钱的洁癖的更多相关文章

  1. 「JSOI2010」找零钱的洁癖

    「JSOI2010」找零钱的洁癖 传送门 个人感觉很鬼的一道题... 首先我们观察到不同的数最多 \(50\) 个,于是考虑爆搜. 但是这样显然不太对啊,状态数太多了. 然后便出现了玄学操作: \(\ ...

  2. SQL反模式学习笔记22 伪键洁癖,整理数据

    目标:整理数据,使不连续的主键Id数据记录变的连续. 反模式:填充断档的数据空缺. 1.不按照顺序分配编号 在插入新行时,通过遍历表,找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键 ...

  3. PAT-乙级-1037. 在霍格沃茨找零钱(20)

    1037. 在霍格沃茨找零钱(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 如果你是哈利·波特迷,你会知 ...

  4. 贪心算法-找零钱(C#实现)

    找零钱这个问题很清楚,无非就是始终拿可以取的最大面值来找,最后就使得张数最小了,这个实现是在假设各种面值足够多的情况下. 首先拖出一个界面来,最下面是一个listbox控件 对应的代码:问题比较简单, ...

  5. [Kali_Debian] 清除无用的库文件(清理系统,洁癖专用)-布布扣-bubuko.com - Google Chrome

    [Kali_Debian] 清除无用的库文件(清理系统,洁癖专用) 时间:2014-11-07 16:25:36      阅读:1486      评论:0      收藏:0      [点我收藏 ...

  6. PAT 1037 在霍格沃茨找零钱(20)(代码+思路)

    1037 在霍格沃茨找零钱(20)(20 分) 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon) ...

  7. PAT 乙级 1037 在霍格沃茨找零钱(20)C++版

    1037. 在霍格沃茨找零钱(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 如果你是哈利·波特迷,你会知 ...

  8. 【算法笔记】B1037 在霍格沃茨找零钱

    1037 在霍格沃茨找零钱 (20 分) 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特( ...

  9. PAT——乙级1022:D进制的A+B &乙级1037:在霍格沃茨找零钱

    1022 D进制的A+B (20 point(s)) 输入两个非负 10 进制整数 A 和 B (≤2​30​​−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依 ...

随机推荐

  1. opencv:图像直方图均衡化

    // 直方图均衡化 Mat gray, dst; cvtColor(src, gray, COLOR_BGR2GRAY); equalizeHist(gray, dst); imshow(" ...

  2. Clausen Functions (and related series, functions, integrals)

    Since the Clausen functions are intimately related to a number of other important special functions, ...

  3. HDU 1016 素数环(dfs + 回溯)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 一道很典型的dfs+回溯: 根据题意首先进行初始化,即第一个位置为1,然后进行dfs, ...

  4. win10鼠标右击 新建文件夹 反应缓慢、迟钝

    1. 先使用360杀毒,步骤如下: 2.修改注册表 https://jingyan.baidu.com/article/363872ec9e25972e4ba16f82.html 3.  如果仍未解决 ...

  5. Tensorflow机器学习入门——常量、变量、placeholder和基本运算

    一.这里列出了tensorflow的一些基本函数,比较全面:https://blog.csdn.net/M_Z_G_Y/article/details/80523834 二.这里是tensortflo ...

  6. 如何使用 Workman 做一个聊天室

    一:首先,得简单说说 thinkphp+workerman 的安装. 安装 thinkphp5.1 composer create-project topthink/think=5.1.x-dev t ...

  7. 解决mysql和navicat乱码问题

    1,首先进入mysql的my.ini文件,进行编码修改,全部改成utf8编码(这里就不赘述了,网上一搜一堆) 2,最重要的一点,把原先navicat创建的连接断开,重新创建新连接,在该新连接下创建库, ...

  8. Vue 项目中使用less

    首先 你得有 完整的 Vue开发环境第一步 安装less 依赖 npm install less less-loader --save 第二步 修改webpack.config.js文件,配置load ...

  9. 【转】shell处理mysql增删改查

    这几天做一个任务,比对两个数据表中的数据,昨天用PHP写了一个版本,但考虑到有的机器没有php或者php没有编译mysql扩展,就无法使用mysql系列的函数,脚本就无效了,今天写个shell版本的, ...

  10. SpringBoot学习笔记(三)——Springboot配置文件

    SpringBoot不像之前用spring+springMVC做项目的时候,他不需要配置大量的看上去很乱很复杂的xml配置文件.在SpringBoot中你可以通过java代码和注解配置项目,也可以通过 ...