首页 > 代码库 > [贪心]TYVJ1032 零用钱
[贪心]TYVJ1032 零用钱
题目大意
每周需要x元钱 给你n种钱币 每种钱币的金额为 v 数量为num 注:每一个面额都能整除所有比它大的面额。
不能找钱!!!
题目思考
就像我们平时买东西一样,先用大钱币支付。之后再考虑如何组合的问题。
组合的话 用 相对大的钱币 和 相对小的钱币组合 来减少浪费。
代码实现让我冥思苦想,最后借鉴了hzwer大佬的代码。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int n,c,ans;struct data{ int v,b; friend bool operator<(data a,data b){ return a.v<b.v; }}a[25];int main(){ scanf("%d%d",&n,&c); for(int i=1;i<=n;i++) { scanf("%d%d",&a[i].v,&a[i].b); if(a[i].v>=c) ans+=a[i].b,a[i].b=0; } sort(a+1,a+n+1); int now=9999999; while(1) { now=0; for(int i=n;i;i--) while(a[i].v+now<c&&a[i].b) { now+=a[i].v,a[i].b--; //printf("%d\n",now); } for(int i=1;i<=n;i++) if(a[i].b) { now+=a[i].v,a[i].b--; break; } //printf("%d\n",a[2].b); if(now>=c)ans++; else break; } printf("%d\n",ans); return 0;}
[贪心]TYVJ1032 零用钱
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。