3306. 有钱人买钻石

题面统计数据讨论

单点时限: 2.0 sec

内存限制: 256 MB

有一个有钱人,他身上带了好多硬币。但是这么多硬币由不方便带,所以他决定要用这些硬币去买钻石。

有趣的是,店里只剩下一颗钻石了。这颗钻石的价格是 P。他身边由一元硬币 N1 枚,五元硬币 N2 枚,十元硬币 N3 枚,二十五元硬币 N4 枚。这些硬币都是一样重的。有钱人当然希望花的硬币越重越好,也就是说数量越多越好,但也不想让商家找钱。你知道应该怎么做吗?

输入格式

第一行一个整数 P,第二行用空格隔开的四个整数 N1,N2,N3,N4。(1≤P≤108,0≤N1,N2,N3,N4≤108)。

对于 30% 的数据,有 P≤103,0≤N1,N2,N3,N4≤100。

输出格式

如果办不到,输出 Impossible,否则输出最多能花掉多少枚硬币。

样例

input

13
3 2 1 1

output

5

input

13
1 1 1 1

output

Impossible

题解:这个题目,乍一看以为是dp背包,可是数据量却那么大,只有1,5,10,25四种面额的硬币,每种数量若干,要使得能够刚好兑换成功总金额,在此前提下,还要使得硬币数量越多越好。我们当然是要让面额小的尽量多使用,但是如果面额小的使用某一值H时,后面可能就无法兑换成功,这时我们从H开始递减地去枚举使用量,但是数据量最大可为10^8,我们是不是要枚举全部值(10^8)呢?这样当然不行。你想,如果只有1和5两种面额的硬币,我们枚举面额1的硬币为high时,只需要枚举区间(high,high-5),再接着去枚举5的硬币,如果这个区间的硬币都无法兑换成功,那就是不行的。

依次类推面额最大为25,我们枚举时只要枚举(high,high-25)这个区间即可。

代码如下:

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn=4;
int v[maxn],num[maxn];
int p,N1,N2,N3,N4;
void init()
{v[0]=1;v[1]=5;v[2]=10;v[3]=25;num[0]=N1;num[1]=N2;num[2]=N3;num[3]=N4;
}
int dfs(int coin,int sum,int ans)//目前兑换到第几种硬币、目前已兑换总额、已经使用的硬币数量
{if(coin==4){if(sum==p)return ans;if(sum!=p)return -1;}if(sum==p)return ans;if(sum>p)return -1;int left=p-sum;int tans=-1;int high=min(left/v[coin],num[coin]);//目前此硬币最多可以用多少int low=max(0,high-25);for(int i=high;i>=low;i--)//依次枚举,枚举到成功则跳出{int tem=dfs(coin+1,sum+i*v[coin],ans+i);if(tem!=-1){tans=tem;break;}}return tans;
}
int main()
{cin>>p>>N1>>N2>>N3>>N4;init();int res=dfs(0,0,0);if(res==-1)cout << "Impossible\n";elsecout << res << endl;return 0;
}

ECNU 3306. 有钱人买钻石 (贪心+dfs)相关推荐

  1. 3306. 有钱人买钻石

    3306. 有钱人买钻石 单点时限: 2.0 sec 内存限制: 256 MB 有一个有钱人,他身上带了好多硬币.但是这么多硬币由不方便带,所以他决定要用这些硬币去买钻石. 有趣的是,店里只剩下一颗钻 ...

  2. 穷人冲冲冲:7个有钱人买,穷人不买的东西

    穷人冲冲冲:7个有钱人买,穷人不买的东西 这次的文章介绍了有钱人买,穷人不买的7种东西. 有钱人和穷人的区别不是有钱与否,而是是否拥有资产. 有钱人买资产. 另一方面,穷人认为是资产,实际上却买了负债 ...

  3. 华为和三星都在高端手机市场衰退了,越来越多有钱人买iPhone

    近日市调机构counterpoint公布的数据显示今年二季度华为和三星均在全球高端手机市场败落,而苹果的市场份额则大幅上涨获取了更多市场份额并成为最大赢家. counterpoint的这份数据显示,华 ...

  4. 为什么“有钱人”爱买华为手机?(深刻)

    身边一位好朋友给我讲过这样一个观察:现在"有钱人"越来越愿意买华为手机,低收入群体则比较倾向于苹果,他也不理解什么原因.有一次去一家高端理发店,他无意中发现学徒都用苹果,而客人摆在 ...

  5. 漂亮服务员想嫁有钱人,老板的回复绝了!

    年轻漂亮的女服务员,在国内一家大型相亲网站的论坛上发表了这样一个帖子--我要怎样才能嫁给有钱人?然后,一件意想不到的事情发生了--免费关注微信公众号 jiarenorg ,就能天天收到佳人精彩文章了, ...

  6. 为什么很多有钱人的妻子不漂亮?

    本文转自微信公众号: 钱生钱 发现一个奇怪的现象,现在有钱人大多偏爱娶样貌平平的女人做老婆,对年龄.学历.是否有共同语言和爱好没有太多的要求,反而是那些收入越低的男士,偏爱娶年轻貌美.有共同爱好语言的 ...

  7. 一个北漂女孩-不想嫁给有钱人

    柯老师:你好! 现在的我是一团乱麻,很需要你这把快刀. 说说我的情况吧,23岁,生长在一个独裁专制的家庭.从小接受苛刻的教育,16岁至今经济独立,全部自给自足,工作上小有成就,担任一家大型外企的部门经 ...

  8. 史上四大“杀人”建筑,烧掉几百亿,却犯低级错误,网友:有钱人的智商,我不懂

    全世界只有3.14 % 的人关注了 爆炸吧知识 本文转自普象工业设计小站 这个世界上有多少荒谬的建筑? 国内土味审美的大楼 只是冰山一角 在更多的国家里 耗费巨资,却无比失败的工程 比土味大楼更多更荒 ...

  9. 你认识的有钱人,是怎么起家的?是做什么生意的?

    我认识的这个有钱人是我本家亲戚,靠房地产起家,可他靠房地产起家后就没有再搞房地产开发,而是给自己留下了一栋商务办公楼,干起了出租房屋的生意. 1.二十年前,他靠房地产起家 2001年,刚年过三十的他厌 ...

最新文章

  1. Jira接入钉钉机器人
  2. thinkphp中data方法
  3. 过直线上一点画垂线图_苏教版四年级数学上册8.5认识垂直、点到直线的距离微课视频 | 练习...
  4. java记事本复制粘贴_Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能...
  5. 【AI视野·今日NLP 自然语言处理论文速览 第十六期】Tue, 29 Jun 2021
  6. svn判断通过svnkit,获取最新的revision以及判断某个revsion是否存在
  7. 中芯国际科创板上市发行价定为27.46元/股,募资或超500亿元
  8. Python基础(2):控制结构
  9. react-custom-scrollbars 滚动条组件的简单实现
  10. Java多线程系列--“JUC集合”04之 ConcurrentHashMap
  11. flask url_for()和redirect的区别
  12. 《阿凡达》《泰坦尼克号》
  13. win10隐藏正在运行的程序怎么操作_win10怎么隐藏正在运行的软件
  14. 【乐理】五度圈(速查表)
  15. 开发一个智能问答机器人
  16. SpringCloud历史版本官网查询方法
  17. K3root刷217,rk3128刷机工具
  18. 纯HTML+CSS网页设计期末作业(海贼王主题网站——图片可换,主题可换)
  19. 齐博cms最新SQL注入网站漏洞 可远程执行代码提权
  20. WOFF字体反爬之58同城

热门文章

  1. 2020社招阿里、腾讯、蚂蚁金服「四面」Java面试真题分享
  2. 数据库mysql的join用法_join连接实例用法总结
  3. android开发静态库,Android:如何正确链接我自己的静态库?
  4. ”与“女屌”双重气质的马佳佳,毕业当天在学校附近开了一家风格独特的
  5. LightningChart为外汇和外汇衍生品交易商提供轻量级图表组件
  6. centos7.4安装zabbix3.4
  7. netty 重要原理分享
  8. iOS使用UIAppearance
  9. CUDA 多显卡支持
  10. 小白保险:听说你买了一份保险?