poj1252Euro Efficiency
来源:互联网 发布:js特效 编辑:程序博客网 时间:2024/06/13 07:07
Euro Efficiency
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 3321 Accepted: 1431
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.
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 number is 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, the average should always contain two digits behind the decimal point. The maximum is always an integer.
Sample Input
31 2 5 10 20 501 24 34 39 46 501 2 3 7 19 72
Sample Output
2.96 52.52 32.80 4
题意,根据给出的硬币,算出消费1到100分别最少需用用到几块硬币(包括给和返的硬币),第一感觉BFS,然后发现WA了,看别人题解说上限最少250 ,然后我上限设200 AC了,至于为什么自己想想~~
#include<iostream> #include<stdio.h> // POJ 125 #include<queue> #include<cstring> using namespace std; int num[6],ans,arr[101],sum,maxn,vsd[200]; struct Node{ int x,l; }; void bfs(int x){ Node node; queue<Node> q; node.l=1; for(int i=0;i<6;i++){ if(num[i]==x) {arr[x]=1; x=0;break;} vsd[num[i]]=1; node.x=num[i]; q.push(node); } if(x>0){ while(!q.empty()){ node=q.front(); q.pop(); node.l++; for(int i=0;i<6;i++){ node.x+=num[i]; if(node.x<=200&&!vsd[node.x]){ if(node.x==x){ arr[x]=node.l; x=0;break; } else { vsd[node.x]=1; q.push(node) ; } } node.x-=num[i]*2; if(node.x>0 && !vsd[node.x]){ if(node.x==x){arr[x]=node.l; x=0;break; } else { vsd[node.x]=1; q.push(node) ; } } node.x+=num[i]; } if(x==0) break; } } } int main(void){ int t; cin>>t; while(t--){ cin>>num[0]>>num[1]>>num[2]>>num[3]>>num[4]>>num[5]; ans=0; sum=0; for(int i=1;i<=100;i++){ memset(vsd,0,sizeof(vsd)); bfs(i); sum+=arr[i]; if(arr[i]>ans) ans=arr[i]; } printf("%.2f %d\n",sum/100.0,ans); } }
0 0
- poj1252Euro Efficiency
- POJ1252Euro Efficiency题解动态规划DP
- High Efficiency
- C++ efficiency
- Improve efficiency
- Solution with High Efficiency?
- Improve Work Efficiency
- const与efficiency&design
- Modify source code efficiency
- ZOJ 1558 Euro Efficiency
- Python Idioms and Efficiency
- poj 1252 Euro Efficiency
- datacenters Power Conversion Efficiency
- poj 1252:Euro Efficiency
- POJ 1252 Euro Efficiency
- High Efficiency Video Coding
- zoj 1558 - Euro Efficiency
- The efficiency of swap
- 统治世界的十大算法
- r0遍历系统进程方法总结
- POJ A Knight's Journey(2488) -dfs&打印路径
- duilib创建的窗体添加边框阴影效果
- ORACLE 查看用户密码修改时间
- poj1252Euro Efficiency
- 递归与循环的区别
- hdu 4268 Alice and Bob(multiset)
- 考试题目分析
- Android 手机定位慢的解决方法
- android 自定义控件
- hdu 4893 Goffi and GCD
- Theano学习1
- spring整合memcached注意事项-poolname