ECNU 3306. 有钱人买钻石 (贪心+dfs)
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)相关推荐
- 3306. 有钱人买钻石
3306. 有钱人买钻石 单点时限: 2.0 sec 内存限制: 256 MB 有一个有钱人,他身上带了好多硬币.但是这么多硬币由不方便带,所以他决定要用这些硬币去买钻石. 有趣的是,店里只剩下一颗钻 ...
- 穷人冲冲冲:7个有钱人买,穷人不买的东西
穷人冲冲冲:7个有钱人买,穷人不买的东西 这次的文章介绍了有钱人买,穷人不买的7种东西. 有钱人和穷人的区别不是有钱与否,而是是否拥有资产. 有钱人买资产. 另一方面,穷人认为是资产,实际上却买了负债 ...
- 华为和三星都在高端手机市场衰退了,越来越多有钱人买iPhone
近日市调机构counterpoint公布的数据显示今年二季度华为和三星均在全球高端手机市场败落,而苹果的市场份额则大幅上涨获取了更多市场份额并成为最大赢家. counterpoint的这份数据显示,华 ...
- 为什么“有钱人”爱买华为手机?(深刻)
身边一位好朋友给我讲过这样一个观察:现在"有钱人"越来越愿意买华为手机,低收入群体则比较倾向于苹果,他也不理解什么原因.有一次去一家高端理发店,他无意中发现学徒都用苹果,而客人摆在 ...
- 漂亮服务员想嫁有钱人,老板的回复绝了!
年轻漂亮的女服务员,在国内一家大型相亲网站的论坛上发表了这样一个帖子--我要怎样才能嫁给有钱人?然后,一件意想不到的事情发生了--免费关注微信公众号 jiarenorg ,就能天天收到佳人精彩文章了, ...
- 为什么很多有钱人的妻子不漂亮?
本文转自微信公众号: 钱生钱 发现一个奇怪的现象,现在有钱人大多偏爱娶样貌平平的女人做老婆,对年龄.学历.是否有共同语言和爱好没有太多的要求,反而是那些收入越低的男士,偏爱娶年轻貌美.有共同爱好语言的 ...
- 一个北漂女孩-不想嫁给有钱人
柯老师:你好! 现在的我是一团乱麻,很需要你这把快刀. 说说我的情况吧,23岁,生长在一个独裁专制的家庭.从小接受苛刻的教育,16岁至今经济独立,全部自给自足,工作上小有成就,担任一家大型外企的部门经 ...
- 史上四大“杀人”建筑,烧掉几百亿,却犯低级错误,网友:有钱人的智商,我不懂
全世界只有3.14 % 的人关注了 爆炸吧知识 本文转自普象工业设计小站 这个世界上有多少荒谬的建筑? 国内土味审美的大楼 只是冰山一角 在更多的国家里 耗费巨资,却无比失败的工程 比土味大楼更多更荒 ...
- 你认识的有钱人,是怎么起家的?是做什么生意的?
我认识的这个有钱人是我本家亲戚,靠房地产起家,可他靠房地产起家后就没有再搞房地产开发,而是给自己留下了一栋商务办公楼,干起了出租房屋的生意. 1.二十年前,他靠房地产起家 2001年,刚年过三十的他厌 ...
最新文章
- Jira接入钉钉机器人
- thinkphp中data方法
- 过直线上一点画垂线图_苏教版四年级数学上册8.5认识垂直、点到直线的距离微课视频 | 练习...
- java记事本复制粘贴_Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能...
- 【AI视野·今日NLP 自然语言处理论文速览 第十六期】Tue, 29 Jun 2021
- svn判断通过svnkit,获取最新的revision以及判断某个revsion是否存在
- 中芯国际科创板上市发行价定为27.46元/股,募资或超500亿元
- Python基础(2):控制结构
- react-custom-scrollbars 滚动条组件的简单实现
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
- flask url_for()和redirect的区别
- 《阿凡达》《泰坦尼克号》
- win10隐藏正在运行的程序怎么操作_win10怎么隐藏正在运行的软件
- 【乐理】五度圈(速查表)
- 开发一个智能问答机器人
- SpringCloud历史版本官网查询方法
- K3root刷217,rk3128刷机工具
- 纯HTML+CSS网页设计期末作业(海贼王主题网站——图片可换,主题可换)
- 齐博cms最新SQL注入网站漏洞 可远程执行代码提权
- WOFF字体反爬之58同城