ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

coins HDU - 3348

2021-02-21 02:32:13  阅读:242  来源: 互联网

标签:HDU int sum coins 3348 最小 ans include 数量


原题链接

考察:贪心

思路:

        最小数量很好求,从大到小贪心即可.关键是最大数量.我们要考虑全部取最小的剩下的还能否被表示的问题.直接取很难求,至少本蒟蒻没想出来怎么求.

        我们求出C的最小数量后,可以发现剩下的是表示总钱数sum-C的最大数量.根据此我们可以求出sum-C的最小数量,剩下的就是最大数量

注意: 不要用C%5当作用去的1元币,如果其他钱数不够只能用一元币答案就会错误.

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 const int N = 6;
 7 typedef pair<int,int> PII;
 8 PII p[N];
 9 int money[6] = {0,1,5,10,50,100};
10 int solve(int C)
11 {
12     int sum = C,ans =0;
13     for(int i=5;i>=1;i--)
14     {
15         int t = sum/p[i].first,k = p[i].second;
16         sum-=min(t,k)*p[i].first;
17         ans+=min(t,k);
18     }
19     if(sum>0) return -1;
20     else return ans;
21 }
22 int main() 
23 {
24     int T;
25     scanf("%d",&T);
26     while(T--)
27     {
28         int C,sum = 0,sum2 = 0;
29         scanf("%d",&C);
30         for(int i=1;i<=5;i++)
31         {
32             scanf("%d",&p[i].second);
33             p[i].first = money[i];
34             sum+=p[i].first*p[i].second;
35             sum2+=p[i].second;
36         }
37         int ans = solve(C);
38         if(ans!=-1)
39         {
40             for(int )
41         }else printf("-1 -1\n"); 
42     }
43     return 0;
44 }

 

标签:HDU,int,sum,coins,3348,最小,ans,include,数量
来源: https://www.cnblogs.com/newblg/p/14424041.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有