POJ 1252 Euro Efficiency【完全背包正负】
2015-09-12 16:46
447 查看
Euro Efficiency
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 3649 | Accepted: 1561 |
Description
On January 1st 2002, The Netherlands, and several other European countries abandoned their national currency in favour of the Euro. This changed the ease of paying, and not just internationally.A student buying a 68 guilder book before January 1st could pay for the book with one 50 guilder banknote and two 10 guilder banknotes, receiving two guilders in change. In short:50+10+10-1-1=68. Other ways of paying were: 50+25-5-1-1, or 100-25-5-1-1.Either
way, there are always 5 units (banknotes or coins) involved in the payment process, and it
could not be done with less than 5 units.
Buying a 68 Euro book is easier these days: 50+20-2 = 68, so only 3 units are involved.This is no coincidence; in many other cases paying with euros is more efficient than paying with guilders. On average the Euro is more efficient. This has nothing to do,
of course, with the value of the Euro, but with the units chosen. The units for guilders used to be: 1, 2.5, 5, 10, 25, 50,whereas the units for the Euro are: 1, 2, 5, 10, 20, 50.
For this problem we restrict ourselves to amounts up to 100 cents. The Euro has coins with values 1, 2, 5, 10, 20, 50 eurocents. In paying an arbitrary amount in the range [1, 100] eurocents, on average 2.96 coins are involved, either as payment or as change.
The Euro series is not optimal in this sense. With coins 1, 24, 34, 39, 46, 50 an amount of 68 cents can be paid using two coins.The average number of coins involved in paying an amount in the range [1, 100] is 2.52.
Calculations with the latter series are more complex, however. That is, mental calculations.These calculations could easily be programmed in any mobile phone, which nearly everybody carries around nowadays. Preparing for the future, a committee of the European
Central Bank is studying the efficiency of series of coins, to find the most efficient series for amounts up to 100 eurocents. They need your help.
Write a program that, given a series of coins, calculates the average and maximum number of coins needed to pay any amount up to and including 100 cents. You may assume that both parties involved have sufficient numbers of any coin at their disposal.
Input
The first line of the input contains the number of test cases. Each test case is described by 6 different positive integers on a single line: the values of the coins, in ascending order. The first number is always 1. The last numberis less than 100.
Output
For each test case the output is a single line containing first the average and then the maximum number of coins involved in paying an amount in the range [1, 100]. These values are separated by a space. As in the example, theaverage should always contain two digits behind the decimal point. The maximum is always an integer.
Sample Input
3 1 2 5 10 20 50 1 24 34 39 46 50 1 2 3 7 19 72
Sample Output
2.96 5 2.52 3 2.80 4
Source
Northwestern Europe 2002嗯,题目大意就是说,给出6种面额的现金,问从1到100用这些面额的纸币表示出来用最少数量的纸币数,然后求的是从1到100平均所用的纸币数以及1到100之间用纸币数最多的那个数所用的纸币数,这里一个数既可以相加得到也可以相减得到,先相加再相减,但是反过来好像也可以,我还没理解透彻。。。这里要求的是尽量少的纸币数,f数组记录所用的纸币数,所以每次所加的价值就变为1了,首先将f数组初始化一个较大的数,这个是相当于背包要恰好装满的,然后f[0]=0(最后就是输出的时候,double型的输入是%lf 而输出是%f
若用C++提交%lf 输出也可以)
#include <iostream> #include<cstdio> #include<cstring> #define maxn 5000+10 using namespace std; int f[maxn],p[7]; int min(int a,int b) { return a<b?a:b; } int main() { int t; scanf("%d",&t); while(t--) { for(int i=0;i<6;++i) scanf("%d",&p[i]); memset(f,0,sizeof(f)); for(int i=1;i<maxn;++i) f[i]=9999; int cnt=0,rec=-1; for(int i=0;i<6;++i) { for(int j=p[i];j<maxn;++j) f[j]=min(f[j],f[j-p[i]]+1); } for(int i=0;i<6;++i) { for(int j=maxn-p[i];j>=0;j--) f[j]=min(f[j],f[j+p[i]]+1); } for(int i=0;i<=100;++i) { cnt+=f[i]; rec=rec>f[i]?rec:f[i]; } printf("%.2f %d\n",cnt*1.0/100,rec); } return 0; }
相关文章推荐
- 适用于学习的错误处理实例到工具类PHP
- php file_exists()函数
- Spring注解注入
- Dialog基础(在一个Activity中创建多个Dialog)
- javax.servlet.jsp cannot be resolved to a type
- javax.servlet.jsp cannot be resolved to a type
- iOS数据持久化(一)
- swun 1766 我的悲剧不可能那么好数
- centos中yum的使用
- zoj1045
- 第05章 动态模块(Dynamics Module)
- 批量更改文件名字
- 第04章 碰撞模块(Collision Module)
- 一个fork的面试题
- Android Studio SVN 出现“Subversion command line client version is too old”
- 第03章 公共模块(Common)
- HYSBZ 2002 Bounce 弹飞绵羊(分块)
- 网络连接2 单线程和多线程下载 并更新progressbar
- Can't add self as subview
- HDU 3126 Nova [2009 Asia Wuhan Regional Contest Online]