题解 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. Spring Boot 框架 - 快速创建Spring Boot应用

    使用Spring的项目创建向导创建一个Spring Boot项目 创建完成目录 目录文件说明: 主启动程序已生成 resources文件夹中目录结构 static:保存所有的静态资源,例如js,css ...

  2. ScheduledThreadPoolExecutor与Timer

    首先来看一下Timer类 例子如下: package cn.concurrent.executor; import java.util.Timer; import java.util.TimerTas ...

  3. 【转】 WordPress数据库及各表结构分析

    默认WordPress一共有以下11个表.这里加上了默认的表前缀 wp_ . wp_commentmeta:存储评论的元数据wp_comments:存储评论wp_links:存储友情链接(Blogro ...

  4. 【C语言】创建一个函数,并调用比较三个数的大小

    #include <stdio.h> int max(int x,int y,int z) { if(x>=y) if(x>=z) return x; else return ...

  5. 【MySQL】完整性约束

    " 目录 not null default unique 单列唯一 联合唯一 primary key 单列主键 复合主键 auto_increment 步长与偏移量 foreign key ...

  6. Ubuntu 安装 uWSGI

    uWSGI官方网址: https://pypi.org/project/uWSGI/ 使用如下命令安装: pip install uWSGI 报如下错: Collecting uWSGI Using ...

  7. Django框架之模板语言特殊标记(将后端的数据显示到前端)

    后端代码 def GetMain(request): return render( request, "main.html", { "user1":" ...

  8. Django框架之模板路径及静态文件路径配置

    内容: (1)模板文件路径的配置 (2)静态文件路径的配置 一.模板文件路径的配置 模板文件主要通过jinja2模板进行渲染html页面,实现动态页面. 步骤一:创建一个template的文件夹,用于 ...

  9. ln N! -> N(lnN -1)

  10. powershell 无法运行一些脚本的情况

    有时候在powershell里运行脚本会报错: 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing" ...